傻逼题
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define gc getchar()
#define N 100010
#define debug(x) cerr<<#x<<"="<<x
#define sp <<" "
#define ln <<endl
using namespace std;
vector<int> g[N],dp[N];
inline int inn()
{
int x,ch;while((ch=gc)<'0'||ch>'9');
x=ch^'0';while((ch=gc)>='0'&&ch<='9')
x=(x<<1)+(x<<3)+(ch^'0');return x;
}
int dfs(int x,int ans=0)
{
for(int i=0;i<(int)g[x].size();i++)
dp[x].push_back(dfs(g[x][i]));
sort(dp[x].begin(),dp[x].end());
for(int i=0;i<(int)dp[x].size();i++)
ans=max(ans,dp[x][i]+(int)dp[x].size()-i);
return ans;
}
int main()
{
int n=inn();
for(int i=2;i<=n;i++) g[inn()].push_back(i);
return !printf("%d\n",dfs(1));
}