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

#include<bits/stdc++.h>
#define rg register
#define il inline
#define cn const
#define gc getchar()
#define fp(i,a,b) for(rg int i=(a),ed=(b);i<=ed;++i)
#define fb(i,a,b) for(rg int i=(a),ed=(b);i>=ed;--i)
#define go(u) for(rg int i=head[u];~i;i=e[i].nxt)
using namespace std;
typedef cn int cint;
typedef unsigned long long LL;
il int rd(){
	rg int x(0),f(1); rg char c(gc);
	while(c<'0'||'9'<c){if(c=='-')f=-1;c=gc;}
	while('0'<=c&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=gc;
	return x*f;
}
cint maxn=1e5+10,mod[2]={998244353,1000000007};
int n,fa[maxn],siz[maxn],ans[maxn];
struct edge{int to,nxt;}e[maxn<<1];
int head[maxn],k;
il void add(cint &u,cint &v){e[k]=(edge){v,head[u]},head[u]=k++;}
int pri[maxn],isnp[maxn*20],m;
int val[maxn][2],val2[maxn][2],val3[maxn][2];
map<LL,int> cnt[2];
void dfs(int u){
	siz[u]=val[u][0]=val[u][1]=1;
	go(u)if(e[i].to!=fa[u]){
		fa[e[i].to]=u,dfs(e[i].to),siz[u]+=siz[e[i].to];
		val[u][0]=(val[u][0]+1ll*val[e[i].to][0]*pri[siz[e[i].to]])%mod[0];
		val[u][1]=(val[u][1]+1ll*val[e[i].to][1]*pri[siz[e[i].to]])%mod[1];
	}
}
void dfs2(int u){
	val2[u][0]=(val2[u][0]+1ll*val2[fa[u]][0]*pri[n-siz[fa[u]]]+val[fa[u]][0]-1ll*val[u][0]*pri[siz[u]]%mod[0]+mod[0])%mod[0];
	val2[u][1]=(val2[u][1]+1ll*val2[fa[u]][1]*pri[n-siz[fa[u]]]+val[fa[u]][1]-1ll*val[u][1]*pri[siz[u]]%mod[1]+mod[1])%mod[1];
	val3[u][0]=(val3[u][0]+1ll*val2[u][0]*pri[n-siz[u]]+val[u][0])%mod[0];
	val3[u][1]=(val3[u][1]+1ll*val2[u][1]*pri[n-siz[u]]+val[u][1])%mod[1];
	go(u)if(e[i].to!=fa[u])dfs2(e[i].to);
}
void dfs3(int u){
	if(!(--cnt[0][val[u][0]]))cnt[0].erase(val[u][0]);
	if(!(--cnt[1][val[u][1]]))cnt[1].erase(val[u][1]);
	ans[u]=max(cnt[0].size(),cnt[1].size());
	if(!cnt[0].count(val3[u][0])&&!cnt[1].count(val3[u][1]))++ans[u];
	go(u)if(e[i].to!=fa[u]){
		++cnt[0][val2[e[i].to][0]];
		++cnt[1][val2[e[i].to][1]];
		dfs3(e[i].to);
		if(!(--cnt[0][val2[e[i].to][0]]))cnt[0].erase(val2[e[i].to][0]);
		if(!(--cnt[1][val2[e[i].to][1]]))cnt[1].erase(val2[e[i].to][1]);
	}
	++cnt[0][val[u][0]],++cnt[1][val[u][1]];
}
int main(){
	memset(head,-1,sizeof head);
	n=rd();
	fp(i,2,n*100){
		if(!isnp[i])pri[++m]=i;
		if(m==n)break;
		for(rg int j=1;j<=m&&pri[j]*i<=n;++j){
			isnp[i*pri[j]]=1;
			if(i%pri[j]==0)break;
		}
	}
	fp(i,2,n){
		rg int u=rd(),v=rd();
		add(u,v),add(v,u);
	}
	dfs(1),dfs2(1);
	fp(i,1,n)++cnt[0][val[i][0]],++cnt[1][val[i][1]];
	dfs3(1);
	int mx=0,id;
	fp(i,1,n)if(mx<ans[i])mx=ans[i],id=i;
	printf("%d\n",id);
//	fp(i,1,n)printf("%d ",ans[i]);puts("");
//	fp(i,1,n)printf("%llu ",val[i]);puts("");
//	fp(i,1,n)printf("%llu ",val2[i]);puts("");
	return 0;
}
     		   	 	  		      			 			