#include <cstdio>
#include <cstring>
#include<iostream>
#include<queue>
#include<stack>
#include<cmath>
#include <map>
#include <algorithm>
using namespace std;
map<string, string>mp;
vector<vector<int> >G;

const int INF=0x3f3f3f3f;
const int maxn=1100;
int maps[maxn][maxn];
int vis[maxn], dist[maxn];
int ans;
int n;
void Init()
{
    memset(vis, 0, sizeof(vis));
    for(int i=0; i<=n; i++)
    {
        for(int j=0; j<=n; j++)
            maps[i][j]=(i==j)?0:INF;
        dist[i]=INF;
    }
}
int dij()
{
    for(int i=0; i<=ans; i++)
        dist[i]=maps[ans/2][i];

    vis[ans/2]=1;

    for(int i=0; i<=ans; i++)
    {
        int Min=INF, index;
        for(int j=0; j<=ans; j++)
        {
            if(!vis[j]&&dist[j]<Min)
            {
                Min=dist[j];
                index=j;
            }
        }

        if(Min==INF)
            break;
        vis[index]=1;

        for(int j=0; j<=ans; j++)
            if(!vis[j]&&dist[j]>Min+maps[index][j])
                dist[j]=Min+maps[index][j];
    }
    int sum=0;

    for(int i=0; i<=ans; i++)
        sum+=dist[i];
    return sum;
}

int main()
{
    while(scanf("%d", &n), n)
    {
        Init();
        ans=0;
        for(int i=0; i<n; i++)
        {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            ans=max(ans, max(u, v));
            maps[u][v]=maps[v][u]=w;
        }

        printf("%d %d\n", ans/2, dij());
    }
    return 0;
}