WA #6
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10,Log_N=26;
int n,d;
int f[N][Log_N],dep[N];
vector<int> s,t;
void add(int x,int fa)
{
dep[x]=dep[fa]+1,f[x][0]=fa;
for(int i=1;i<Log_N;i++)
f[x][i]=f[f[x][i-1]][i-1];
}
int lca(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
for(int i=Log_N-1;i>=0;i--)
if(dep[f[x][i]]>=dep[y])x=f[x][i];
for(int i=Log_N-1;i>=0;i--)
if(dep[f[x][i]]!=dep[f[y][i]])
x=f[x][i],y=f[y][i];
return x==y?x:f[x][0];
}
int dis(int x,int y){return dep[x]+dep[y]-2*dep[lca(x,y)];}
signed main()
{
scanf("%lld",&n);
s.push_back(1);
for(int i=2,x;i<=n+1;i++)
{
scanf("%lld",&x);
add(i,x);
int sdis=0,tdis=0;
if(!s.empty())sdis=dis(i,s[0]);
if(!t.empty())tdis=dis(i,t[0]);
if(sdis>d||tdis>d)
{
d=max(sdis,tdis);
if(d==sdis)
{
for(int j=0;j<t.size();j++)
if(dis(i,t[j])==d)s.push_back(t[j]);
t.clear();
t.push_back(i);
}
else if(d==tdis)
{
for(int j=0;j<s.size();j++)
if(dis(i,s[j])==d)t.push_back(s[j]);
s.clear();
s.push_back(i);
}
}
else
{
if(sdis==d)t.push_back(i);
else if(tdis==d)s.push_back(i);
}
printf("%lld\n",s.size()+t.size());
}
}