from collections import deque
def bfs(n):
q.append(n)
G[n] = 1 # 记录深度
while q:
x = q.popleft()
for j in range(2): # 左右各判断一次
if V[x][j] != 0: # 有子节点就继续
q.append(V[x][j])
G[V[x][j]] = G[x] + 1 # 记录深度
n = int(input())
V = {} # 建个字典
q = deque()
for i in range(n):
l, r = map(int, input().split())
V[i + 1] = (l, r) # 塞键值对,节点数
G = [0 for i in range(n + 1)]
bfs(1)
print(max(G)) #, end='')
# max(G)
# import sys
#
# sys.setrecursionlimit(5000)
# def dfs(x, y):
# global longth
# if x == 0 or V[x] == (0, 0):
# return
# longth = max(longth, y)
# dfs(V[x][0], y + 1)
# dfs(V[x][1], y + 1)
#
#
# n = int(input())
# # V = {} # 建个字典
# longth = 0
# for i in range(n):
# l, r = map(int, input().split())
# # V[i + 1] = (l, r) # 塞键值对,节点数
#
# dfs(l, r)
# print(longth + 1) #, end='')
'''
第三题
试题名称:天空之城的树
时间限制:1.0 s
内存限制:128.0 MB
问题描述
拉姆达人在修建天空之城时,主要是依赖巨大的飞行石去维持悬空状态,依赖强壮的大树去作为建筑物的框架,假设大树是一棵有 n (n≤103)个结点的二叉树。给出每个结点的两个子结点编号(均不超过 n),建立一棵二叉树(根节点的编号为 1),如果是叶子结点,则输入 0 0。
建好这棵二叉树之后,请帮拉姆达设计师求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
输入描述
第一行一个整数 n,表示结点数。之后 n 行,第 i 行两个整数 l、r,分别表示结点i的左右子结点编号。若 l=0 则表示无左子结点,r=0 同理。
输出描述
一个整数,表示最大结点深度。
输入样例
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
输出样例
4
数据规模
数据保证,对于全部的测试点,保证 1≤n≤103。
'''