import java.util.*; public class Main { private static class TreeNode { int value; ArrayList<TreeNode> sons = new ArrayList<>(); public TreeNode(int value) { this.value = value; } } private static Map<Integer, TreeNode> int2TreeNode = new HashMap<>(); public static void main(String args[]) throws Exception { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); HashSet<Integer> parents = new HashSet<>(); HashSet<Integer> sons = new HashSet<>(); for (int i = 0; i < n - 1; i++) { int parent = cin.nextInt(); int son = cin.nextInt(); if (!int2TreeNode.containsKey(parent)) { int2TreeNode.put(parent, new TreeNode(parent)); } if (!int2TreeNode.containsKey(son)) { int2TreeNode.put(son, new TreeNode(son)); } int2TreeNode.get(parent).sons.add(int2TreeNode.get(son)); parents.add(parent); sons.add(son); } parents.removeAll(sons); int root = 0; for (Integer item : parents) { root = item; } System.out.println(dfs(root)); } } private static int dfs(int root) { TreeNode rootNode = int2TreeNode.get(root); if (rootNode == null || rootNode.sons.size() == 0) return 1; else { int maxx = 0; for (int i = 0, len = rootNode.sons.size(); i < len; i++) { int nextRoot = rootNode.sons.get(i).value; if (nextRoot != root) { maxx = Math.max(maxx, dfs(nextRoot)); } } return maxx + 1; } } }