# your code goes here
import sys
sys.setrecursionlimit(100000)
def dfs(node, parent, depth, adj):
global max_depth, farthest_node
if depth > max_depth:
max_depth = depth
farthest_node = node
for neighbor in adj[node]:
if neighbor != parent:
dfs(neighbor, node, depth + 1, adj)
def longest_path_in_tree(n, edges):
adj = [[] for _ in range(n + 1)]
for u, v in edges:
adj[u].append(v)
adj[v].append(u)
# First DFS
global max_depth, farthest_node
max_depth = -1
farthest_node = 1
dfs(1, -1, 0, adj)
# Second DFS from the farthest node found
max_depth = -1
dfs(farthest_node, -1, 0, adj)
return max_depth
# Input parsing
n = int(input())
edges = [tuple(map(int, input().split())) for _ in range(n - 1)]
print(longest_path_in_tree(n, edges))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmltcG9ydCBzeXMKc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDEwMDAwMCkKCmRlZiBkZnMobm9kZSwgcGFyZW50LCBkZXB0aCwgYWRqKToKICAgIGdsb2JhbCBtYXhfZGVwdGgsIGZhcnRoZXN0X25vZGUKICAgIGlmIGRlcHRoID4gbWF4X2RlcHRoOgogICAgICAgIG1heF9kZXB0aCA9IGRlcHRoCiAgICAgICAgZmFydGhlc3Rfbm9kZSA9IG5vZGUKICAgIGZvciBuZWlnaGJvciBpbiBhZGpbbm9kZV06CiAgICAgICAgaWYgbmVpZ2hib3IgIT0gcGFyZW50OgogICAgICAgICAgICBkZnMobmVpZ2hib3IsIG5vZGUsIGRlcHRoICsgMSwgYWRqKQoKZGVmIGxvbmdlc3RfcGF0aF9pbl90cmVlKG4sIGVkZ2VzKToKICAgIGFkaiA9IFtbXSBmb3IgXyBpbiByYW5nZShuICsgMSldCiAgICBmb3IgdSwgdiBpbiBlZGdlczoKICAgICAgICBhZGpbdV0uYXBwZW5kKHYpCiAgICAgICAgYWRqW3ZdLmFwcGVuZCh1KQoKICAgICMgRmlyc3QgREZTCiAgICBnbG9iYWwgbWF4X2RlcHRoLCBmYXJ0aGVzdF9ub2RlCiAgICBtYXhfZGVwdGggPSAtMQogICAgZmFydGhlc3Rfbm9kZSA9IDEKICAgIGRmcygxLCAtMSwgMCwgYWRqKQoKICAgICMgU2Vjb25kIERGUyBmcm9tIHRoZSBmYXJ0aGVzdCBub2RlIGZvdW5kCiAgICBtYXhfZGVwdGggPSAtMQogICAgZGZzKGZhcnRoZXN0X25vZGUsIC0xLCAwLCBhZGopCgogICAgcmV0dXJuIG1heF9kZXB0aAoKIyBJbnB1dCBwYXJzaW5nCm4gPSBpbnQoaW5wdXQoKSkKZWRnZXMgPSBbdHVwbGUobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkgZm9yIF8gaW4gcmFuZ2UobiAtIDEpXQpwcmludChsb25nZXN0X3BhdGhfaW5fdHJlZShuLCBlZGdlcykpCg==