#include<bits/stdc++.h>
using namespace std;
#define N 100010
struct edge
{
int nxt,to;
}e[N<<1];
int n,cnt=1;
int head[N],ans[N],deep[N];
int dp[N][510];
void link(int u,int v)
{
e[++cnt].nxt=head[u];
head[u]=cnt;
e[cnt].to=v;
}
void dfs(int u)
{
dp[u][0]=1;
for(int i=head[u];i;i=e[i].nxt)
{
dfs(e[i].to);
deep[u]=max(deep[u],deep[e[i].to]+1);
for(int j=0;j<=deep[u];++j)
for(int k=0;k<=deep[e[i].to];++k)
ans[j^(k+1)]+=dp[u][j]*dp[e[i].to][k];
for(int j=0;j<=deep[e[i].to];++j) dp[u][j+1]+=dp[e[i].to][j];
}
}
int main()
{
scanf("%d",&n);
for(int i=2;i<=n;++i)
{
int u; scanf("%d",&u);
link(u,i);
}
dfs(1);
int mx=522;
for(;mx;--mx) if(ans[mx]) break;
for(int i=0;i<=mx;++i) printf("%d\n",ans[i]);
return 0;
}