/*
->树中的节点都只有一个爹
->最深的未被覆盖的点 的祖父 应该设立消防站
-> ai<i fa[i]已出现
选取一个点时 更新父 祖父 节点的信息+兄弟点也会影响 父代 信息-> min()
->cover[i] 离i最近的消防站距离
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
//#include<queue>
//#include<vector>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------------\n");
using namespace std;
const int maxn=1e4+10 ;
const int inf=0x3f3f3f3f;
int n,fa[maxn],dep[maxn],cov[maxn],biao[maxn],ans;
bool cmp(int a,int b){
return dep[a]>dep[b];
}
int main()
{
ios::sync_with_stdio(false);
cin>>n; fa[1]=1,dep[1]=1,biao[1]=1;
memset(cov,inf,sizeof(cov));
for(int i=2;i<=n;i++) cin>>fa[i],dep[i]=dep[fa[i]]+1,biao[i]=i;
sort(biao+1,biao+1+n,cmp);
for(int i=1;i<=n;i++)
{
int u=biao[i],f1=fa[u],f2=fa[f1];
cov[u]=min(cov[u],cov[f1]+1);
cov[u]=min(cov[u],cov[f2]+2);
if(cov[u]>2)
{
ans++;
cov[f2]=0;
cov[fa[f2]]=min(cov[fa[f2]],1);
cov[fa[fa[f2]]]=min(cov[fa[fa[f2]]],2);
}
}
cout<<ans<<endl;
return 0;
}