// Slower C++ solution:
#include <iostream>

#include <iomanip>

#include <cstdio>

#include <string>

#include <cstring>

#include <deque>

#include <list>

#include <queue>

#include <stack>

#include <vector>

#include <utility>

#include <algorithm>

#include <map>

#include <set>

#include <complex>

#include <cmath>

#include <limits>

#include <cfloat>

#include <climits>

#include <ctime>

#include <cassert>

using namespace std;



#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)

#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)

#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)

#define all(v) begin(v), end(v)

#define pb(a) push_back(a)

#define fr first

#define sc second

#define INF 2000000000

#define int long long int



#define X real()

#define Y imag()

#define EPS (1e-10)

#define EQ(a,b) (abs((a) - (b)) < EPS)

#define EQV(a,b) ( EQ((a).X, (b).X) && EQ((a).Y, (b).Y) )

#define LE(n, m) ((n) < (m) + EPS)

#define LEQ(n, m) ((n) <= (m) + EPS)

#define GE(n, m) ((n) + EPS > (m))

#define GEQ(n, m) ((n) + EPS >= (m))



typedef vector<int> VI;

typedef vector<VI> MAT;

typedef pair<int, int> pii;

typedef long long ll;



typedef complex<double> P;

typedef pair<P, P> L;

typedef pair<P, double> C;



int dy[]={0, 0, 1, -1};

int dx[]={1, -1, 0, 0};

int const MOD = 1000000007;



namespace std {

    bool operator<(const P& a, const P& b) {

        return a.X != b.X ? a.X < b.X : a.Y < b.Y;

    }

}



signed main() {

    int n; cin >> n;

    int a[100010] = {};

    int sum = 0;



    rep(i,0,n) {

        cin >> a[i];

        sum += a[i];

    }



    int cs[100010] = {};

    int ret[100010] = {};

    int cntnum = 0;



    if(sum % (n * (n+1) / 2)) cout << "NO" << endl;

    else {

        cntnum = sum / (n*(n+1) / 2);

        rep(i,0,n) {

            int prev = (i - 1 + n) % n;

            int s = a[prev] - a[i];

            if( (s+cntnum) % n != 0 || (s + cntnum) / n < 0) {

                cout << "NO" << endl;

                return 0;

            }

            cs[i] += (s + cntnum) / n;

        }

        rep(i,0,n) ret[0] += cs[i] * ((n - i) % n + 1);

        rep(i,1,n) ret[i] = ret[i-1] - cs[i] * n + cntnum;

        rep(i,0,n) {

            if(ret[i] != a[i]) {

                cout << "NO" << endl;

                return 0;

            }

        }

        cout << "YES" << endl;

    }

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.9027248692524148x):
#include <iostream>

#include <iomanip>

#include <cstdio>

#include <string>

#include <cstring>

#include <deque>

#include <list>

#include <queue>

#include <stack>

#include <vector>

#include <utility>

#include <algorithm>

#include <map>

#include <set>

#include <complex>

#include <cmath>

#include <limits>

#include <cfloat>

#include <climits>

#include <ctime>

#include <cassert>

using namespace std;



#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)

#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)

#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)

#define all(v) begin(v), end(v)

#define pb(a) push_back(a)

#define fr first

#define sc second

#define INF 2000000000

#define int long long int



#define X real()

#define Y imag()

#define EPS (1e-10)

#define EQ(a,b) (abs((a) - (b)) < EPS)

#define EQV(a,b) ( EQ((a).X, (b).X) && EQ((a).Y, (b).Y) )

#define LE(n, m) ((n) < (m) + EPS)

#define LEQ(n, m) ((n) <= (m) + EPS)

#define GE(n, m) ((n) + EPS > (m))

#define GEQ(n, m) ((n) + EPS >= (m))



typedef vector<int> VI;

typedef vector<VI> MAT;

typedef pair<int, int> pii;

typedef long long ll;



typedef complex<double> P;

typedef pair<P, P> L;

typedef pair<P, double> C;



int dy[]={0, 0, 1, -1};

int dx[]={1, -1, 0, 0};

int const MOD = 1000000007;



namespace std {

    bool operator<(const P& a, const P& b) {

        return a.X != b.X ? a.X < b.X : a.Y < b.Y;

    }

}



signed main() {

    int n; cin >> n;

    int a[100010] = {};

    int sum = 0;



    rep(i,0,n) {

        cin >> a[i];

        sum += a[i];

    }



    int cs[100010] = {};

    int ret[100010] = {};

    int cntnum = 0;



    if(sum % (n * (n+1) / 2)) cout << "NO" << endl;

    else {

        cntnum = sum / (n*(n+1) / 2);

        rep(i,0,n) {

            int prev = (i - 1 + n) % n;

            int s = a[prev] - a[i];

            // n で割り切れなければ操作回数が小数になるので不適

            // 結果が負になるのも不適 (操作回数は非負整数)

            if( (s+cntnum) % n != 0 || (s + cntnum) / n < 0) {

                cout << "NO" << endl;

                return 0;

            }

            cs[i] += (s + cntnum) / n;

        }

        /*

        rep(i,0,n) ret[0] += cs[i] * ((n - i) % n + 1);

        rep(i,1,n) ret[i] = ret[i-1] - cs[i] * n + cntnum;

        rep(i,0,n) {

            if(ret[i] != a[i]) {

                cout << "NO" << endl;

                return 0;

            }

        }

        */

        cout << "YES" << endl;

    }

    return 0;

}