1 #include<bits/stdc++.h>
2 using namespace std;
3 int const N=100000+10;
4 struct edge{
5 int to,nt;
6 }e[N<<1];
7 int s[N],top,n,cnt,h[N],num[N],sum,bl[N],scc,dfn[N],low[N],h2[N],f[N];
8 void add(int a,int b){
9 e[++cnt].to=b;
10 e[cnt].nt=h[a];
11 h[a]=cnt;
12 }
13 void add2(int a,int b){
14 e[++cnt].to=b;
15 e[cnt].nt=h2[a];
16 h2[a]=cnt;
17 }
18 void dfs(int x){
19 s[++top]=x;
20 dfn[x]=low[x]=++sum;
21 for(int i=h[x];i;i=e[i].nt){
22 int v=e[i].to;
23 if(!dfn[v]){
24 dfs(v);
25 low[x]=min(low[x],low[v]);
26 }else if(!bl[v]) low[x]=min(low[x],dfn[v]);
27 }
28 if(low[x]==dfn[x]){
29 scc++; num[scc]=1;
30 while (s[top]!=x)
31 bl[s[top--]]=scc,num[scc]++;
32 bl[s[top--]]=scc;
33 }
34 }
35 void solve(int x){
36 if(f[x]) return ;
37 f[x]=num[x];
38 for(int i=h2[x];i;i=e[i].nt){
39 int v=e[i].to;
40 solve(v);
41 f[x]=max(f[x],f[v]+num[x]);
42 }
43 }
44 int main(){
45 //freopen("std.in","r",stdin);
46 scanf("%d",&n);
47 for(int i=1;i<=n;i++){
48 int x;
49 scanf("%d",&x);
50 add(i,x);
51 }
52 for(int i=1;i<=n;i++)
53 if(!dfn[i]) dfs(i);
54 for(int i=1;i<=n;i++){
55 for(int j=h[i];j;j=e[j].nt){
56 int x=bl[i];
57 int y=bl[e[j].to];
58 if(x!=y) add2(x,y);
59 }
60 }
61 for(int i=1;i<=scc;i++)
62 if(!f[i]) solve(i);
63 for(int i=1;i<=n;i++)
64 printf("%d\n",f[bl[i]]);
65 return 0;
66 }