#pragma GCC diagnostic ignored "-Wimplicit-function-declaration" #pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch" #pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd_init() char*rp=({char*mmap(...);mmap(0l,1l<<25,1,2,0,0ll);}) #define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) #define wt(v) ({unsigned _z=v,_n=0;long _d=0;while(++_n,_d=_d<<8|0x30|_z%10,_z/=10);*(long*)wp=_d;wp+=_n;}) #define rep(v,e) for(typeof(e)v=0;v>=x; b>>=y; int c; while(c=a-b){ c>>=__builtin_ctz(c); if(c<0){ b=-c; }else{ a=c; } } return a<<(x<=y?x:y); } char wbuf[1<<25]; int p[200000]; int c[200000]; char v[200000]; int n; void f1(){ rd_init(); n=rd(); rep(i,n){ p[i]=rd()-1; } } void f2(){ rep(i,n){ if(!v[i]){ int x=i,g=0,d=0; do{ g=gcd(g,abs(p[x]-x)); ++d; v[x]=1; x=p[x]; }while(x!=i); c[g]+=d-1; } } } void f3(){ reps(i,2,n){ if(v[i]){ for(int j=(n-1)/i,k=j*i;j;j-=1,k-=i){ c[j]+=c[k]; v[k]=0; } } } } void f4(){ char*wp=wbuf; reps(i,1,n){ wt(c[i]); *wp++='\n'; } write(1,wbuf,wp-wbuf); } int main(){ f1(); f2(); f3(); f4(); _exit(0); }