import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Scanner;
//知识点:二叉树,中序遍历,数组
public class P4913 {
static int ans = 0;
static Node tree[];
public static void main(String args[]) throws IOException {
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken();
int n = (int)st.nval;
tree = new Node[n+1];
for(int i=1; i<=n; i++){
st.nextToken();
tree[i] = new Node();
tree[i].left = (int)st.nval;
st.nextToken();
tree[i].right = (int)st.nval;
}
dfs(1,1);
System.out.println(ans);
}
static void dfs(int node,int depth){
if(node == 0){
return;
}
ans = Math.max(depth, ans);
dfs(tree[node].left, depth+1);
dfs(tree[node].right, depth+1);
return;
}
static class Node{
int left;
int right;
}
}