#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,head[N],tot,dep[N],len,s,t,dis[N],fa[N],ma,l,r,ans;
bool vis[N];
struct o{
int ne,to,dis;
}e[N<<1];
inline void add(int x,int y,int k){
e[++tot].ne=head[x];
head[x]=tot;
e[tot].to=y;
e[tot].dis=k;
}
inline void dfs(int x,int f){
fa[x]=f;
if(dep[x]>ma){
ma=dep[x];
s=x;
}
for(int i=head[x];i;i=e[i].ne){
int to=e[i].to;
if(to==f)continue;
dep[to]=dep[x]+e[i].dis;
dfs(to,x);
}
return;
}
inline void dfs2(int x,int fa){
for(int i=head[x];i;i=e[i].ne){
int to=e[i].to;
if(to==fa||vis[to])continue;
if(!dis[to])dfs(to,x);
dis[x]=max(dis[x],dis[to]+e[i].dis);
}
return;
}
signed main(){
cin>>n;
for(int i=1;i<n;i++){
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
dfs(1,0);
dep[s]=0;
t=s,ma=0;
dfs(s,0);
int p=s;
cout<<dep[s]<<endl;
ans=dep[s];
while(s){
vis[s]=1;
s=fa[s];
r++;
}
l=1;
int k=0;
while(p){
dfs2(p,0);
k++;
if(dis[p]==ans-dep[p])l=max(l,k);
if(dis[p]==dep[p])r=min(r,k);
p=fa[p];
}
cout<<r-l;
return 0;
}