using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NMi => ReadLine().Split().Select(c => int.Parse(c) - 1).ToArray(); static int[][] NMap(int n) => Enumerable.Repeat(0, n).Select(_ => NMi).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var map = NMap(n - 1); var tree = new List[n]; for (var i = 0; i < n; ++i) tree[i] = new List(); foreach (var edge in map) { tree[edge[0]].Add(edge[1]); tree[edge[1]].Add(edge[0]); } var len1 = Len(n, tree, 0); var far = 0; var fari = 0; for (var i = 0; i < n; ++i) if (far < len1[i]) { far = len1[i]; fari = i; } var len2 = Len(n, tree, fari); WriteLine(n - 1 - len2.Max()); } static int[] Len(int n, List[] tree, int start) { var len = Enumerable.Repeat(n, n).ToArray(); len[start] = 0; var q = new Queue(); q.Enqueue(start); while (q.Count > 0) { var cur = q.Dequeue(); foreach (var next in tree[cur]) { if (len[next] <= len[cur] + 1) continue; len[next] = len[cur] + 1; q.Enqueue(next); } } return len; } }