#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <queue>#include <stack>#include <map>#include <vector>using namespace std;#define up(i,x,y) for(i=x;i<=y;i++)#define up2(i,x,y) for(i=x;y;i++)#define down(i,x,y) for(i=x;i>=y;i--)#define down2(i,x,y) for(i=x;y;i--)#define pi acos(-1.0)#define ll long long#define s(a) scanf("%d",&a)#define mem(a,b) memset(a,b,sizeof(a))#define ads(a) (a<0?-a:a)#define w(a) while(a)int vis[100005],dp[100005],n,a[100005];vector<int>g[100005];int dfs(int x){ if(dp[x]!=-1) return dp[x]; int l=g[x].size(); if(!l) dp[x]=1; else if(l==1) dp[x]=dfs(g[x][0]); else dp[x]=min(max(dfs(g[x][0])+1,dfs(g[x][1])),max(dfs(g[x][0]),dfs(g[x][1])+1)); return dp[x];}int main(){ int i,j; w(~s(n)) { up(i,0,n) { dp[i]=-1; g[i].clear(); } up(i,2,n) { s(a[i]); g[a[i]].push_back(i); } printf("%dn",dfs(1)); }}