#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//1に繋がる枝の長さを配列に収め、大きい順にソートしてi+a[i]の最大値が深さ
int N;
int lost[100010];
vector<int> win[100010];

int dfs(int cur){
	int ret=0;
	vector<int> depth;
	for(int i=0;i<win[cur].size();i++){
		depth.push_back(-dfs(win[cur][i]));
	}
	sort(depth.begin(),depth.end());
	for(int i=0;i<depth.size();i++){
		ret=max(ret,i-depth[i]);
	}
	return ret+1;
}

int main(){
	cin>>N;
	for(int i=2;i<=N;i++)	cin>>lost[i];
	for(int i=2;i<=N;i++)	win[lost[i]].push_back(i);
	cout<<dfs(1)-1<<endl;
	return 0;
}
