using namespace std;
#include <iostream>
#include <iomanip>
#include <vector>
#include <cstdio>
#include <set>
#include <cctype>
#include <map>
#include <cmath>
#include <queue>
#include <algorithm>
#include <stack>
#include <cctype>
#include <cstring>
#include <string>

#define MAX 10100
#define PRIME 31
#define MOD 1000000007
#define PI 3.1415926535897932384
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
typedef long long ll;

vector<int> adj[MAX];
int maxi, dia_end, n;

void dfs(int ind, int prev, int cont){

    if(cont > maxi){
        maxi = cont;
        dia_end = ind; // Possible end of tree's diameter
    }

    for(int i = 0;i < adj[ind].size();i++){
        if(adj[ind][i] == prev) continue;
        dfs(adj[ind][i], ind, cont+1);
    }
}

int main(){
    ios::sync_with_stdio(false);
    //freopen("in.txt", "r", stdin);

    while(cin >> n && n != -1){

        // Initialize
        for(int i = 1;i <= n;i++) adj[i] = vector<int>();
        maxi = 0;

        for(int x, i = 2;i <= n;i++){
            cin >> x;
            adj[x].pb(i);
            adj[i].pb(x);
        }

        // Find one end of the tree's diameter
        dfs(1, -1, 1);
        // Find the total length of the tree's diameter
        dfs(dia_end, -1, 1);

        // Time needed is total length/2
        cout << maxi/2 << endl;
    }

    return 0;
}
