#include #include //#include using namespace std; //using namespace atcoder; #define rep(i,a,n) for (int i = a; i < (n); i++) //#define REP(m) for (int i = 0; i < (m); i++) #define all(x) (x).begin(),(x).end() using ll = long long; using P = pair; using Graph = vector>; using Grid = vector>; int mod = 998244353; int INF = 1001001001; //cout << fixed << setprecision(15); using vi = vector; using vc = vector; using vs = vector; using vll = vector; using pii = pair; using pci = pair; using pic = pair; using pll = pair; using mii = map; using mci = map; int Flag=0; //デフォルトでNoがでる void yn(int Flag){ if(Flag==1){ cout<<"Yes"<> &V){ int n=V.size(); rep(i,0,n){ for(auto x:V[i]){ cerr<> &G){ int n=G.size(); rep(i,0,n){ for(auto& vertex:G[i]){ cerr< &V){ for(auto& v:V){ cerr< m_parentsOrSize; }; //通常dfs void dfs(int now, vector &seen, Graph &G){ seen[now]=true; for(auto next:G[now]){ if(seen[next]) continue; dfs(next, seen,G); } } //サイクル検出dfs bool dfs(int now, vector &seen, vector &finished, Graph &G){ bool res=1; seen[now]=1; for(auto nx:G[now]){ if(seen[nx] && !finished[nx]){ res=0; return res; } else if(seen[nx]){ continue; } res&=dfs(nx, seen, finished, G); } finished[now]=1; return res; } //典型グラフ問題main関数 /* int main(){ int N,M; cin>>N>>M; Graph G(N); rep(i,0,M){ int A,B; cin>>A>>B; A--; B--; G[A].push_back(B); G[B].push_back(A); } } */ //2進数にする string to_2(int K){ string res; while(K>0){ if(K%2==1){ res+='1'; } else{ res+='0'; } K/=2; } reverse(all(res)); return res; } //N未満の素数を全列挙する関数 vector Eratosthenes( const int N ){ //is_prime[i]がfalse->iは素数 vector is_prime(N+1); vector res; rep(i,2,N+1){ if(is_prime[i]==false){ for(int j=2*i; j mp){ auto begin = mp.begin(), end = mp.end(); for (auto iter = begin; iter != end; iter++) { // first: key, second: value cout << "key = " << iter->first << "\n"; cout << "value = " << iter->second << "\n"; } } int main(){ int N; cin>>N; vector A(N); rep(i,0,N) cin>>A[i]; rep(i,0,N){ A[i]+=1e9+2; } rep(i,0,N-1){ if(A[i+1]%N!=A[i]%N){ yn(0); return 0; } } yn(1); }