1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #define MAXN 50010
7 using namespace std;
8 typedef struct PP{
9 int id,par;
10 bool operator < (const PP & a) const{
11 if(par == a.par) return id < a.id;
12 return par < a.par;
13 }
14 }Partition;
15 typedef struct{
16 int to,next;
17 }Node;
18 Node edge[2*MAXN];
19 Partition P[MAXN];
20 int head[MAXN],vis[MAXN],cnt[MAXN],N;
21 void addedge(int u,int v,int k){
22 edge[k].to = v;
23 edge[k].next = head[u];
24 head[u] = k;
25 }
26 int dfs_child(int s){
27 vis[s] = cnt[s] = 1;
28 for(int i = head[s];~i;i = edge[i].next){
29 int u = edge[i].to;
30 if(!vis[u]) cnt[s] += dfs_child(u);
31 }
32 return cnt[s]--;
33 }
34 void dfs_partition(int s){
35 P[s].id = s;
36 P[s].par = N-cnt[s]-1;
37 vis[s] = 1;
38 for(int i = head[s];~i;i = edge[i].next){
39 int u = edge[i].to;
40 if(!vis[u]){
41 P[s].par = max(P[s].par,cnt[u]+1);
42 dfs_partition(u);
43 }
44 }
45 }
46 int main(){
47 int u,v;
48 while(~scanf("%d",&N)){
49 int k = 1;
50 memset(head,-1,sizeof(head));
51 for(int i = 1;i <= N-1;i ++){
52 scanf("%d%d",&u,&v);
53 addedge(u,v,k++);
54 addedge(v,u,k++);
55 }
56 memset(vis,0,sizeof(vis));
57 dfs_child(1);
58 memset(vis,0,sizeof(vis));
59 dfs_partition(1);
60 sort(P+1,P+N+1);
61 k = 1;
62 while(P[k].par == P[1].par){
63 printf("%d ",P[k].id);
64 k++;
65 }
66 printf("\n");
67 }
68 return 0;
69 }