#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 抄博友程序 dfs 背
int mx[20008];//去掉节点 j 后 形成若干树的节点数的最大值
int siz[20008];
vector<int> G[20008];
int ans;
int n;
void dfs(int x,int fa)
{
siz[x]=1;
for(int i=0;i<G[x].size();i++)
{
int y=G[x][i];
if(y!=fa)
{
dfs(y,x);
siz[x]=siz[x]+siz[y];
mx[x]=max(mx[x],siz[y]);
}
}
mx[x]=max(mx[x],n-siz[x]);
if(mx[x]<mx[ans])
{
ans=x;
}else if(mx[x]==mx[ans])
{
if(x<ans)
{
ans=x;
}
}
}
int main()
{
int T;
cin>>T;
for(int o=0;o<T;o++)
{
memset(mx,0,sizeof(mx));
memset(siz,0,sizeof(siz));
ans=0;
mx[0]=0x3f3f3f3f;//抄博友程序
for(int i=0;i<20008;i++)
{
G[i].clear();
}
cin>>n;
for(int i=0;i<n-1;i++)
{
int x,y;
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
dfs(1,0);
cout<<ans<<" "<<mx[ans]<<endl;
}
return 0;
}