///////////////////////////////
// Template By: Agus Sentosa //
//      31 - 01 - 2017       //
///////////////////////////////
//           Note            //
// * Don't use std::remove   //
// * Special flag: DEBUG     //
///////////////////////////////

#include <bits/stdc++.h>
using namespace std;

//Data Type
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
typedef pair<double,double> pdd;
typedef vector<int> VI;
typedef vector<VI> VII;
typedef vector<string> VS;
typedef vector<VS> VSS;
typedef vector<LL> VL;
typedef vector<VL> VLL;
typedef vector<double> VD;
typedef vector<VD> VDD;
typedef vector<char> VC;
typedef vector<VC> VCC;

//Data Type Properties
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define ins insert
#define remove erase
#define p push

//Macro
#define all(v) (v).begin(),(v).end()
#define sortv(v) sort(all(v))
#define reversev(v) reverse(all(v))
#define POPCOUNT __builtin_popcount
#define POPCOUNTLL __builtin_popcountll
#define CTZ __builtin_ctz
#define CTZLL __builtin_ctzll
#define THIS (*this)

//Output optimization for iostream
#define endl '\n'

//Debugging
#ifdef DEBUG
	#define DO_IF_DEBUG_FLAG_IS_ON 1
	#undef DEBUG
	#undef endl
#else
	#define DO_IF_DEBUG_FLAG_IS_ON 0
#endif
#define DEBUG if(DO_IF_DEBUG_FLAG_IS_ON)
#define NDEBUG if(!DO_IF_DEBUG_FLAG_IS_ON)
#define valueOf(x) cout << "Value of \"" << #x << "\" is \"" << x << "\"" << endl << flush;

//Some common inline function
template<class T, class U, class V> inline bool inRange(T a, U b, V c){	return b <= a && a <= c; }
template<class T> inline T sqr(T a){ return a * a; }
template<class T> inline void MAX(T &a, T b){ a = max(a,b); }
template<class T> inline void MIN(T &a, T b){ a = min(a,b); }

//pair<T,V> function (somehow very helpfull)
template<class T, class V>
pair<T,V> operator+(pair<T,V> a, pair<T,V> b){
	return {a.f + b.f, a.s + b.s};
}

template<class T, class V>
pair<T,V> operator-(pair<T,V> a, pair<T,V> b){
	return {a.f - b.f, a.s - b.s};
}

//Some I/O options

//Only for NON-NEGATIVE INTEGER!
#ifdef _WIN32
#define getchar_unlocked getchar
#endif
#define GETCHAR getchar_unlocked
template<class T = int>
inline bool io(T &res){
    static char c=' ';
    if(c == -1)return 0;
    while(c == ' ' || c == '\n')c = GETCHAR();
    if(c == -1)return 0;
    res = c - '0';
    while((c=GETCHAR()) && c != ' ' && c != '\n' && c != '\r' && c!=-1){ res = (res << 3) + (res << 1) +  c - '0'; }
    return 1;
}

inline string getString(){
	char buff[1000006];
	scanf("%s", buff);
	return buff;
}

inline void open(string a){
    freopen((a+".in").c_str(),"r",stdin);
    freopen((a+".out").c_str(),"w",stdout);
}

inline void close(){
    fclose(stdin);
    fclose(stdout);
}

//Constant
const int INF = (int)1e9 + 9;
const LL LINF = (LL)1e18 + 18;
const double DINF = numeric_limits<double>::infinity();
const int INV = -INF;
const LL LINV = -LINF;
const double DINV = -DINF;
const int MOD = (int)1e9 + 7;
const int dx[] = {1,0,-1,0,1,1,-1,-1};
const int dy[] = {0,1,0,-1,1,-1,1,-1};
///////////////////////////////
//      End of Template      //
///////////////////////////////

LL arr[100005];

int main(){
	NDEBUG ios_base::sync_with_stdio(false); std::cin.tie(0);
	
	int n; cin >> n;
	LL sum = 0, tmp = 0;
	for(int i = 0 ; i < n ; i ++)
		cin >> arr[i], sum += arr[i], tmp += i+1;
	
	if(sum % tmp != 0){
		cout << "NO" << endl;
		return  0;
	}
	
	int x = arr[0];
	for(int i = 0 ; i < n - 1; i ++)
		arr[i] = arr[i + 1] - arr[i];
	arr[n - 1] = x - arr[n - 1];
	
	sum /= tmp;
	
	for(int i = 0 ; i < n ; i ++)
		arr[i] -= sum;
		
		
	DEBUG for(int i = 0 ; i < n ; i ++)valueOf(arr[i]);
		
	for(int i = 0 ; i < n ; i ++){
		if(arr[i] > 0){
			cout << "NO" << endl;
			return 0;
		}
		
		if(arr[i] % n != 0){
			cout << "NO" << endl;
			return 0;
		}
	}
	
	cout << "YES" << endl;


	return 0;
}




Measured memory_bytes: 1024