#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<iomanip>
#include<cctype>
#define MAX 456789123
using namespace std;
struct node
{
int next,to;
double val;
}bb[1000];
int sum=0,head[1000];
double ans=0,sss[1000];int N;
int visit[1000];
void add(int a,int b,double c)
{
bb[sum].to=b;
bb[sum].next=head[a];
bb[sum].val=c;
head[a]=sum++;
}
void zx(int a)
{
double max=MAX;int k=MAX;
for(int i=head[a];i!=-1;i=bb[i].next)
{
int u=bb[i].to;
if(!visit[u])
{
if(bb[i].val<=sss[u]){sss[u]=bb[i].val;}
}
}
for(int i=1;i<=N;i++)
{
if(!visit[i]&&sss[i]<max)
{
max=sss[i];k=i;
}
cout<<i<<' '<<sss[i]<<endl;
}
visit[k]=1;
ans=ans+max;
}
int main()
{
while(cin>>N&&N)
{
for(int i=1;i<=N;i++)
sss[i]=MAX;
memset(visit,0,sizeof(visit));
memset(head,-1,sizeof(head));
int n;
n=N*(N-1)/2;
while(n--)
{
int a,b;
double c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
for(int i=1;i<N;i++)
{
visit[i]=1;
zx(i);
}
printf("%.2f\n",ans);
}
}