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

import java.io.*;
import java.util.*;

public class CF763D {
	static int M = 1000000007;
	static int mul(int a, int b) { return (int) ((long) a * b % M); }
	//http://rng-58.blogspot.jp/2017/02/hashing-and-probability-of-collision.html
	static int[] xx;
	static void rng_58(int n) {
		Random rng = new Random(58);
		xx = new int[n];
		for (int i = 0; i < n; i++)
			xx[i] = rng.nextInt(M - 1) + 1;
	}
	static class E {
		int i, j, hp, hq, p, q;
		E(int i, int j) {
			this.i = i; this.j = j;
		}
	}
	static class V {
		ArrayList<E> list = new ArrayList<>();
		HashMap<Integer,Integer> map;
		int i;
		V(int i) {
			this.i = i;
		}
		void dfs1(E f) {
			int hp = 0;
			for (E e : list)
				if (e != f) {
					int j = e.i == i ? e.j : e.i;
					e.i = i; e.j = j;
					vv[j].dfs1(e);
					hp = Math.max(hp, e.hp + 1);
				}
			int x = xx[hp], p = 1;
			for (E e : list)
				if (e != f)
					p = mul(p, x + e.p);
			f.hp = hp;
			f.p = p;
		}
		void dfs2(E f) {
			if (list.size() == 1)
				return;
			int h1 = 0, h2 = 0, h = f.hq + 1;
			E e1 = null;
			for (E e : list)
				if (e != f) {
					if (h1 < e.hp + 1) {
						h1 = e.hp + 1;
						e1 = e;
					}
				}
			for (E e : list)
				if (e != f && e != e1) {
					if (h2 < e.hp + 1)
						h2 = e.hp + 1;
				}
			int hq = Math.max(h, h2);
			int x = xx[hq];
			int q = (x + f.q) % M;
			for (E e : list)
				if (e != f && e != e1)
					q = mul(q, (x + e.p) % M);
			e1.hq = hq;
			e1.q = q;
			if (list.size() > 2) {
				hq = Math.max(h, h1);
				x = xx[hq];
				q = mul((x + f.q) % M, (x + e1.p) % M);
				E[] ee = new E[list.size() - 2];
				int k = 0;
				for (E e : list)
					if (e != f && e != e1)
						ee[k++] = e;
				int[] bb = new int[k + 1];
				bb[0] = 1;
				for (int i = 1; i <= k; i++)
					bb[i] = mul(bb[i - 1], (x + ee[i - 1].p) % M);
				int[] dd = new int[k + 1];
				dd[k] = 1;
				for (int i = k - 1; i >= 0; i--)
					dd[i] = mul(dd[i + 1], (x + ee[i].p) % M);
				for (int i = 0; i < k; i++) {
					ee[i].hq = hq;
					ee[i].q = mul(q, mul(bb[i], dd[i + 1]));
				}
			}
			for (E e : list)
				if (e != f)
					vv[e.j].dfs2(e);
		}
		void dfs3(E f) {
			if (list.size() == 1) {
				map = new HashMap<>();
				map.put(f.p, 1);
				return;
			}
			int max = 0;
			for (E e : list)
				if (e != f) {
					V v = vv[e.j];
					v.dfs3(e);
					int s = v.map.size();
					if (max < s) {
						max = s;
						map = v.map;
					}
				}
			map.put(f.p, map.getOrDefault(f.p, 0) + 1);
			for (E e : list)
				if (e != f) {
					V v = vv[e.j];
					if (v.map != map)
						for (Map.Entry<Integer,Integer> entry : v.map.entrySet()) {
							int key = entry.getKey();
							int val = entry.getValue();
							map.put(key, map.getOrDefault(key, 0) + val);
						}
				}
		}
		void inc(int key) {
			map_.put(key, map_.getOrDefault(key, 0) + 1);
		}
		void dec(int key) {
			int val = map_.get(key) - 1;
			if (val > 0)
				map_.put(key, val);
			else
				map_.remove(key);
		}
		void dfs4(E f) {
			inc(f.q);
			dec(f.p);
			int s = map_.size();
			if (s_ < s) {
				s_ = s;
				i_ = i;
			}
			for (E e : list)
				if (e != f)
					vv[e.j].dfs4(e);
			inc(f.p);
			dec(f.q);
		}
	}
	static V[] vv;
	static HashMap<Integer,Integer> map_;
	static int s_, i_;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		if (n == 1) {
			System.out.println(1);
			return;
		}
		vv = new V[n];
		for (int i = 0; i < n; i++)
			vv[i] = new V(i);
		for (int h = 0; h < n - 1; h++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int i = Integer.parseInt(st.nextToken()) - 1;
			int j = Integer.parseInt(st.nextToken()) - 1;
			E e = new E(i, j);
			vv[i].list.add(e);
			vv[j].list.add(e);
		}
		rng_58(n);
		V u = null;
		for (V v : vv)
			if (v.list.size() == 1) {
				u = v;
				break;
			}
		E e = u.list.get(0);
		V v = vv[e.i == u.i ? e.j : e.i];
		e.i = u.i; e.j = v.i;
		e.q = 1; e.hq = 0;
		v.dfs1(e);
		v.dfs2(e);
		v.dfs3(e);
		map_ = v.map;
		s_ = v.map.size();
		i_ = u.i;
		v.dfs4(e);
		System.out.println(i_ + 1);
	}
}
