#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=5005;
struct node{
int u,v,weight;
}edge[maxn];
int set[105];
bool cmp(node a,node b){
return a.weight<b.weight;
}
int f_set(int u){
if(set[u]==-1)return u;
else return set[u]=f_set(set[u]);
}
int u_s_set(int u,int v){
int u1=f_set(u);
int v1=f_set(v);
if(u1==v1)return 0;
if(u1<v1)set[v1]=u1;
else set[u1]=v1;
return 1;
}
int main()
{
int n;
while(cin>>n)
{
if(n==0)break;
int m=n*(n-1)/2;
memset(set,-1,sizeof(set));
for(int i=0;i<m;i++)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].weight);
sort(edge,edge+m,cmp);
int minsum=0,cnt=0;
for(int i=0;i<m;i++)
{
if(u_s_set(edge[i].u,edge[i].v)){
cnt++;
minsum+=edge[i].weight;
}
if(cnt==n-1)break;
}
cout<<minsum<<endl;
}
return 0;
}