// 我们将一棵树T = ( V,E )的直径定义为maxδ ( u,v ) ( u,v ∈ V ),也就是说,树中所有最短路径距离的最大值即为树的直径。
// 对于树的直径呢,我们老师给我们介绍了两种做法,一种是用两次bfs(或者dfs),另一种是用树形DP
// 对于树的直径,两种做法,一种是用两次bfs(或者dfs),另一种是用树形DP
// 两次dfs 先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径
//至于树形dp,难,略
#include<bits/stdc++.h>
using namespace std;
const int N=20000+10;
int n,ans=0,first[N],next1[N],u[N],v[N],w[N],d[N]={0},mxx=0,pt=0;
void dfs1(int rt,int f,int l){
if(l>mxx){
mxx=l;
pt=rt;
}
for(int i=first[rt];i!=-1;i=next1[i]){
if(v[i]==f) continue;
dfs1(v[i],rt,l+w[i]);
}
}
void dfs2(int rt,int f,int l){
ans=max(ans,l);
for(int i=first[rt];i!=-1;i=next1[i]){
if(v[i]==f) continue;
dfs2(v[i],rt,l+w[i]);
}
}
int main() {
cin>>n;
memset(first,255, sizeof(first));
memset(next1,255, sizeof(next1));
for(int i=1;i<n;i++){
cin>>u[i]>>v[i]>>w[i];
next1[i]=first[u[i]];
first[u[i]]=i;
u[i+n]=v[i];
v[i+n]=u[i];
w[i+n]=w[i];
next1[i+n]=first[u[i+n]];
first[u[i+n]]=i+n;
}
dfs1(1,-1,0);
dfs2(pt,-1,0);
cout<<pt<<endl;
cout<<ans<<endl;
return 0;
}