# 接收节点个数
n = int(input())

# 设置各节点默认高度为1
tree = [1] * n
# 设置各节点默认子节点数为0
childNum = [0] * n

# 遍历后续输入的n-1行数据,依次处理
for i in range(n-1):
    # 将输入的行数据按空格拆分,第一个是当前节点的父节点,第二个是当前节点
    listTemp = input().split(" ")
    parent = int(listTemp[0])
    node = int(listTemp[1])

    # 如果当前节点的父节点的子节点数大于等于2,则已不满足二叉树规范,需减掉此节点,不做后续操作
    if childNum[parent] >= 2:
        tree[node] = 0
        continue

    # 当前节点的高度,在父节点的高度上+1
    tree[node] = tree[parent] + 1
    # 当前节点的父节点的子节点数加上当前节点(+1)
    childNum[parent] += 1

# 打印各节点高度列表中,最大值
print(max(tree))