#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 100;
char buf[MAXN];
int n;
string s;
bool isPrime(int x) {
  for (int d = 2; d * d <= x; d++) {
    if (x % d == 0) return false;
  }
  return true;
}
long long expo(long long b, long long e, long long mod) {
  long long res = 1, base = b;
  while (e > 0) {
    if (e % 2) (res *= base) %= mod;
    (base *= base) %= mod;
    e /= 2;
  }
  return res;
}
long long a[MAXN];
vector<long long> primes;
vector<long long> GetPrs(long long mod) {
  vector<long long> res;
  for (long long i = 2; i < mod && res.size() < 100; i++) {
    bool ok = true;
    for (long long p : primes) {
      if (expo(i, (mod - 1) / p, mod) == 1) {
        ok = false;
        break;
      }
    }
    if (ok) res.push_back(i);
  }
  assert(res.size() > 0);
  return res;
}
vector<long long> PrimesThatDiv(long long p) {
  vector<long long> res;
  for (long long i = 2; i * i <= p; i++) {
    if (p % i == 0) {
      res.push_back(i);
      while (p % i == 0) p /= i;
    }
  }
  if (p > 1) res.push_back(p);
  return res;
}
int main() {
  scanf("%d", &n);
  scanf("%s", buf);
  s = string(buf);
  for (int i = 0; i < n; i++) {
    a[i] = buf[i] - '0';
  }
  long long prime = -1, k;
  for (k = 1000;; k++) {
    long long curr = k * n + 1;
    if (isPrime(curr)) {
      prime = curr;
      break;
    }
  }
  primes = PrimesThatDiv(prime - 1);
  vector<long long> prs = GetPrs(prime);
  for (long long r : prs) {
    r = expo(r, k, prime);
    long long sum = 0, b = 1;
    for (int i = 0; i < n; i++) {
      sum += b * a[i] % prime;
      sum %= prime;
      b = (b * r) % prime;
    }
    if (sum > 0) {
      puts("NO");
      return 0;
    }
  }
  printf("YES\n");
  return 0;
}
