#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <iostream>
using namespace std;
#pragma warning(disable:4996)
typedef struct NODE
{
int le = 0,
ri = 0;
}node;
node nodes[100000 + 1];
int stack(node nodes[],int n,int deep);
int max(int a, int b) { return a > b ? a : b; }
int main()
{
int nodenum = 0;
cin >> nodenum;
for (int i = 1; i <= nodenum; i++)
{
cin >> nodes[i].le >> nodes[i].ri;
}
cout<<stack(nodes, 1, 0);
return 0;
}
int stack(node nodes[], int n, int deep)
{
if (nodes[n].le == 0 || nodes[n].ri == 0)
return deep + 1;
else
return max(stack(nodes,nodes[n].le,deep+1),
stack(nodes,nodes[n].ri,deep+1));
}