#include <iostream>
using namespace std;
#include<vector>
int n = 0;
int r = 0;
int max(int a, int b){
return a > b ? a : b;
}
int Hight(int r, int *mas){
int hight = 1;
vector<int> children;
for(int i = 0; i < n; ++i){
if(mas[i] == r){
children.push_back(i);
}
}
for(int i =0; i < children.size(); ++i){
hight = max(hight, Hight(children[i], mas) + 1);
}
return hight;
}
int main(){
cin>>n;
int *mas = new int[n];
for(int i = 0; i < n; ++i){
cin>>mas[i];
if(mas[i] == -1)
r = i;
}
cout<<Hight(r, mas);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGU8dmVjdG9yPgoKaW50IG4gPSAwOwppbnQgciA9IDA7CgppbnQgbWF4KGludCBhLCBpbnQgYil7CiAgICByZXR1cm4gYSA+IGIgPyBhIDogYjsKfQppbnQgSGlnaHQoaW50IHIsIGludCAqbWFzKXsKICAgIGludCBoaWdodCA9IDE7CiAgICB2ZWN0b3I8aW50PiBjaGlsZHJlbjsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpewogICAgICAgIGlmKG1hc1tpXSA9PSByKXsKICAgICAgICAgICAgY2hpbGRyZW4ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IGkgPTA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSl7CiAgICAgICAgaGlnaHQgPSBtYXgoaGlnaHQsIEhpZ2h0KGNoaWxkcmVuW2ldLCBtYXMpICsgMSk7CiAgICB9CiAgICByZXR1cm4gaGlnaHQ7Cn0KaW50IG1haW4oKXsKICAgIGNpbj4+bjsKCiAgICBpbnQgKm1hcyA9IG5ldyBpbnRbbl07CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgKytpKXsKICAgICAgICBjaW4+Pm1hc1tpXTsKICAgICAgICBpZihtYXNbaV0gPT0gLTEpCiAgICAgICAgICAgIHIgPSBpOwogICAgfQoKICAgIGNvdXQ8PEhpZ2h0KHIsIG1hcyk7CgoKCn0=