#include<bits/stdc++.h>
using namespace std;
struct Node{
int l,r;
bool bj;
}a[int(1e6+1)];
long long ans=0;
void dfs(int i,long long js)
{
a[i].bj=1;
if(a[i].l!=0)
{
dfs(a[i].l,js+1);
}
else
{
ans=max(js,ans);
return;
}
if(a[i].r!=0)
{
dfs(a[i].r,js+1);
}
else
{
ans=max(js,ans);
return;
}
return;
}
void read(int &x)
{
x=0;
int f=1;
char ch=getchar();
while
((ch<'0'||ch>'9')&&ch!='-')
ch=getchar();
if(ch=='-')
f=-1;
while(ch>='0'&&ch<='9')
{
x*=10;
x+=ch-'0';
ch=getchar();
}
x*=f;
}
int main()
{
int n,f=1;
read(n);
for(int i=1;i<=n;i++)
{
int x1,x2;
read(x1);
read(x2);
if((x1==f)||(x2==f))
{
f=i;
}
a[i].l=x1;
a[i].r=x2;
}
dfs(f,1);
cout<<ans;
return 0;
}