#include<bits/stdc++.h>
#define MEM(x) memset((x),0,sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define ll long long
#define ull unsigned long long
#define pii_ pair<int,int>
#define mp_ make_pair
#define pb push_back
#define fi first
#define se second
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define show1(a) cout<<#a<<" = "<<a<<endl
#define show2(a,b) cout<<#a<<" = "<<a<<"; "<<#b<<" = "<<b<<endl
using namespace std;
const ll INF = 1LL<<60;
const int inf = 1<<30;
const int maxn = 2e5+5;
inline void fastio() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);}
int n,head[maxn],tot;
int idx1[maxn],idx2[maxn],idx3[maxn],fi[maxn][2],se[maxn][2],th[maxn][2],fa[maxn][2],d[maxn];
struct edge
{
int u,v,w,nxt;
}es[maxn<<1];
void addedge(int u,int v,int w)
{
es[++tot] = (edge){u,v,w,head[u]};
head[u] = tot;
}
void dfs1(int u,int f)
{
for(int i=head[u];~i;i=es[i].nxt){
int v = es[i].v,w = es[i].w;
if(v==f) continue;
dfs1(v,u);
d[v] = w;
if(fi[v][0] + w > fi[u][0]){
th[u][0] = se[u][0];
idx3[u] = idx2[u];
se[u][0] = fi[u][0];
idx2[u] = idx1[u];
fi[u][0] = fi[v][0] + w;
idx1[u] = v;
}else if(fi[v][0] + w > se[u][0]){
th[u][0] = se[u][0];
idx3[u] = idx2[u];
se[u][0] = fi[v][0] + w;
idx2[u] = v;
}else if(fi[v][0] + w > th[u][0]){
th[u][0] = fi[v][0] + w;
idx3[u] = v;
}
}
fi[u][1] = min(fi[idx1[u]][0], max(fi[idx1[u]][1],se[idx1[u]][0]) + d[idx1[u]]);
se[u][1] = min(fi[idx2[u]][0], max(fi[idx2[u]][1],se[idx2[u]][0]) + d[idx2[u]]);
}
void dfs2(int u,int f)
{
for(int i=head[u];~i;i=es[i].nxt){
int v = es[i].v,w = es[i].w;
if(v==f) continue;
if(idx1[u]==v){
fa[v][0] = max(fa[u][0],se[u][0]) + w;
fa[v][1] = min(max(fa[u][0],se[u][0]), min(max(fa[u][1],se[u][0]), max(fa[u][0],max(se[u][1],th[u][0]))) + w);
}else{
fa[v][0] = max(fa[u][0],fi[u][0]) + w;
if(idx2[u]==v){
fa[v][1] = min(max(fa[u][0],fi[u][0]), min(max(fa[u][1],fi[u][0]), max(fa[u][0],max(fi[u][1],th[u][0]))) + w);
}else{
fa[v][1] = min(max(fa[u][0],fi[u][0]), min(max(fa[u][1],fi[u][0]), max(fa[u][0],max(fi[u][1],se[u][0]))) + w);
}
}
dfs2(v,u);
}
}
int main()
{
fastio();
int _,u,v,w;
for(cin>>_;_;_--){
tot=0;
cin>>n;
MEM(fi);MEM(se);MEM(th);MEM(fa);
memset(head,-1,sizeof(head));
rep(i,1,n-1){
cin>>u>>v>>w;
addedge(u,v,w);
addedge(v,u,w);
}
dfs1(1,0);
dfs2(1,0);
int ans = inf,id;
rep(i,1,n){
int res = min(max(fa[i][1],fi[i][0]),max(fa[i][0],max(fi[i][1],se[i][0])));
if(res<ans) ans=res,id=i;
}
cout<<id<<" "<<ans<<endl;
}
return 0;
}