rt,
#pragma GCC optmize(2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
#define abs(a) ((a) > 0 ? (a) : 0 - (a))
#define in(a,b,c) ((a) >= (b) && (a) <= (c))
#define isint(a) (floor(a) == a)
#define endl '\n'
using namespace std;
const int mod = 10007;
int n,x,num0,num1,last;
bool first = true;
vector<int> v[mod];
void insert(int x) {
v[x % mod].push_back(x);
}
bool find(int x) {
for(int i = 0; i < v[x % mod].size(); i++) {
if(v[x % mod][i] == x)return true;
}
return false;
}
void check() {
int tmp = (last == 0 ? num0 : num1);
last = 1 - last;
if(x == 0)num0++;
else num1++;
if(n % tmp != 0) {
cout << "NO";
exit(0);
} else {
if(!find(tmp) && !first) {
cout << "NO";
exit(0);
} else {
first = false;
insert(tmp);
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> x;
if(i == 1)last = x;
if(x == last) {
if(x == 0)num0++,num1 = 0,last = 0;
else num1++,num0 = 0,last = 1;
} else {
check();
}
}
check();
cout << "YES";
}