#include<bits/stdc++.h>
using namespace std;
vector <int> f[100005];//一个动态二维数组,f[i]是一个一维数组名,其数据类型为int
int dfs(int node){
int count=0;
if(f[node].size()==0){//如果node结点的
return 0;
}
for(int i=0;i<f[node].size();i++){//遍历node结点的所有孩子节点
count=max(count,dfs(f[node][i]));//取node结点的所有孩子结点的最大子树深度
}
count=count+f[node].size();//该结点的孩子数+该结点孩子的子树的最大深度
return count;
}
int main(){
int m,n;
cin>>m;
for(int i=2;i<=m;i++){
cin>>n;
//加入i=2,n=1,则f[n][0]=i;
f[n].push_back(i);//n表示是第几个结点的孩子,i表示第i号结点,
}
cout<<dfs(1);
return 0;
}