10
6 8
3 10
1 9
6 1
8 2
5 7
3 6
10 4
3 5
 1
 5
1 2
2 3
3 4
4 5
 7
2 3
2 6
1 2
3 7
6 5
3 4
 10
8 4
8 10
8 1
8 2
5 9
5 3
5 7
8 5
5 6
 10
8 6
3 4
10 9
7 10
1 3
4 2
6 1
5 8
9 5
 10
1 10
6 9
5 4
1 3
1 2
3 8
6 7
8 6
1 5
 20
13 4
7 6
9 13
9 2
9 16
4 18
16 5
11 15
16 14
13 12
13 8
16 17
7 1
9 19
17 3
15 20
1 11
2 7
5 10
 3
1 2
1 3
 50
18 47
18 12
42 16
21 44
43 39
20 27
25 1
11 29
9 24
19 42
3 34
16 38
14 48
23 41
8 43
29 2
40 4
45 36
43 9
49 3
41 17
41 15
35 49
43 20
5 32
34 46
8 21
43 45
29 40
39 26
27 33
24 50
38 7
39 19
43 31
24 10
3 14
39 22
43 23
47 13
20 11
25 8
16 30
44 18
19 37
39 5
49 28
25 35
46 6
 15
11 2
5 13
9 4
5 7
11 5
13 14
2 10
3 11
7 1
7 6
10 15
9 12
2 9
10 8
 31
15 2
23 19
11 4
26 6
1 20
14 11
19 13
26 12
12 27
20 14
22 21
4 16
10 18
5 23
4 31
12 8
2 17
19 30
14 26
2 28
22 7
23 9
20 5
5 15
9 29
15 10
6 25
6 24
9 3
11 22
 63
34 40
43 62
33 43
49 6
17 47
26 13
35 15
40 16
17 44
37 34
18 55
57 10
16 14
39 56
36 5
4 33
4 59
54 24
37 45
21 31
57 2
19 8
43 41
49 48
15 19
35 4
15 63
30 50
11 30
59 18
20 46
18 1
33 17
31 22
40 54
63 49
29 25
46 9
16 3
42 23
59 7
54 53
42 38
8 60
8 58
7 51
36 28
63 36
21 57
25 37
45 20
25 35
19 26
20 42
30 32
11 39
7 12
31 52
45 21
26 27
34 11
46 61

9
 1
 1
 1
 1
 2
 10
 18
 2
 13
 1
 3
 1

/// d.cpp

# include <stdio.h>
# include <bits/stdc++.h>
using namespace std;
const pair < int , int > DD[] = {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define IOS ios_base :: sync_with_stdio(0);cin.tie(0)
# define p(v) cerr << #v << " = " << v << '\n'
# define p2(v) cerr << #v << " = " << (complex < __typeof(v.x) > (v.x,v.y)) << '\n'
# define vi vector < int >
# define vl vector < ll >
# define pll pair < ll , ll >
# define pii pair < int , int >
# define mp make_pair
# define db long double
# define fail puts("-1")
# define yes puts("YES")
# define no puts("NO")
# define PP puts("Possible")
# define II puts("Impossible")
# define vii vector < pii >
# define vll vector < pll >
# define pb push_back
# define pdd pair < db , db >
# define ull unsigned ll
template < class T > T smin(T &a,T b) {if (a > b) a = b;return a;}
template < class T > T smax(T &a,T b) {if (a < b) a = b;return a;}
int main(void)
{
    #ifdef CF
    freopen("input","r",stdin);
    #endif // CF
    srand(time(0));
    fo << fixed << setprecision(7);
    cerr << fixed << setprecision(7);
    int n;
    static ull seed[1 << 20];
    const int mod = 1e9 + 7;
    fi>>n;
    for (int i = 1;i <= n + n + 5;++i)
        seed[i] = (1ll * rand()) << 48 + (1ll * rand() << 32) + (1ll * rand() << 16) + (1ll * rand());
    static vi g[1 << 20];
    for (int i = 1;i < n;++i)
    {
        int a,b;
        fi>>a>>b;
        g[a].pb(b);
        g[b].pb(a);
    }
    static map < ull , int > M;
    static int H[1 << 20];
    int was = 0;
    auto get = [&](auto k)
    {
        if (!M.count(k))
            M[k] = ++was;
        return M[k];
    };
    function < void(int,int) > dfs1 = [&](int node,int prev)
    {
        ull hs = 0;
        for (auto it : g[node])
            if (it != prev)
                dfs1(it,node),hs += seed[H[it]];
        H[node] = get(hs);
    };
    dfs1(1,0);
    int cnt = 0;
    static int pidar[1 << 20];
    auto ADD = [&](int v)
    {
        cnt += !(pidar[v]++);
    };
    auto DEL = [&](int v)
    {
        cnt -= !(--pidar[v]);
    };
    for (int i = 1;i <= n;++i)
        ADD(H[i]);
    pii answer = mp(-1,0);
    p(cnt);
    function < void(int,int,ull) > dfs2 = [&](int node,int prev,int add)
    {
        smax(answer,mp(cnt,node));
        DEL(H[node]);
        ull hs = 0;
        for (auto it : g[node])
            if (it != prev)
                hs += seed[H[it]];
        hs += seed[add];
        for (auto it : g[node])
            if (it != prev)
            {
                hs -= seed[H[it]];
                ADD(get(hs));
                dfs2(it,node,get(hs));
                DEL(get(hs));
                hs += seed[H[it]];
            }
        ADD(H[node]);
    };
    dfs2(1,0,0);
    fo << answer.y << '\n';
    cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
    return 0;
}
