using System;
using System.Collections.Generic;
class Program {
    static void Main() {
        int n = int.Parse(Console.ReadLine());
        int i, j, k, u, v, m, a, b, c, t, raz, max;
        List<int> T = new List<int>();
        List<int> O = new List<int>();
        List<int> T1 = new List<int>();
        List<int> Ti = new List<int>();
        for(i = 1; i < n; i++) {
            string s = Console.ReadLine();
            string[] g = s.Split(null);
            u = int.Parse(g[0]);
            v = int.Parse(g[1]);
            T.Add(u);
            T.Add(v);
        }
        u = T.Count;
        for(i = 1; i <= n; i++) { O.Add(i); }
        for(i = 0; i < u; i++) { 
            if(i == 0) {
                a = T[i];
                b = T[i + 1];
                if(a == b) { T.Remove(i + 1); u = T.Count; }
            }
            else if(i == u - 1) {
                a = T[i - 1];
                b = T[i];
                if(a == b) { T.Remove(i); u = T.Count; }
            }
            else {
                a = T[i - 1];
                b = T[i];
                c = T[i + 1];
                if(a == b) { T.Remove(i - 1); u = T.Count; }
                if(b == c) { T.Remove(i + 1); u = T.Count; }
            }
        }
        v = O.Count;
        T1.Add(O[(int)((v-1) / 2)]);
        t = n - 2; 
        j = ((int)((v-1) / 2)) - 1;
        k = ((int)((v-1) / 2)) + 1;
        for(i = 1; i < t; i++) {
            T1.Add(O[j]);
            j--;
            i++;
            T1.Add(O[k]);
            k++;
        }
        for(i = 0; i < t; i++) {
            a = T1[i];
            for(j = 0; j < u; j++) {
                b = T[j];
                if(a == b) { Ti.Add(j); }
            }
        }
        m = Ti.Count;
        raz = 0;
        max = 0;
        for(i = 0; i < m; i++) { max += T1[i]; }
        for(i = 0; i < m - 1; i++) {
            raz = Math.Abs(Ti[i+1] - Ti[i]);
            max = Math.Min(raz, max);
        }
        Console.WriteLine(max);
    }
}