1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #define MAXN 20010
7 using namespace std;
8 typedef struct{
9 int to,next;
10 }Node;
11 typedef struct PP{
12 int id,par;
13 bool operator < (const PP &a) const {
14 if(par == a.par) return id < a.id;
15 return par < a.par;
16 }
17 }Partition;
18 Node edge[MAXN*2];
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(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(u);
31 }
32 return cnt[s]--;
33 }
34 void dfs_partition(int s){
35 vis[s] = 1;
36 P[s].id =s;
37 P[s].par = N - cnt[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 t,u,v;
48 // freopen("in.c","r",stdin);
49 scanf("%d",&t);
50 while(t--){
51 memset(head,-1,sizeof(head));
52 scanf("%d",&N);
53 int k = 1;
54 for(int i = 1;i <= N-1;i ++){
55 scanf("%d%d",&u,&v);
56 addedge(u,v,k++);
57 addedge(v,u,k++);
58 }
59 memset(vis,0,sizeof(vis));
60 dfs(1);
61 memset(vis,0,sizeof(vis));
62 dfs_partition(1);
63 sort(P+1,P+N+1);
64 printf("%d %d\n",P[1].id,P[1].par);
65 }
66 return 0;
67 }