#include<bits/stdc++.h>
using namespace std;
/*
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );
随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,
以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
*/
int main(){
//显然,最小生成树,用prim算法
int n,x,y,dis,k;
while(cin>>n)
{
vector<vector<int>>dist(100,vector<int>(100,INT_MAX));
if(n==0){break;}
for(int i=0;i<n*(n-1)/2;i++)
{
cin>>x>>y;
cin>>dist[x][y];
dist[y][x]=dist[x][y];
}
//prim
vector<int>load(n+1,0);
vector<int>visted(n+1,0);
int ans=0;
load[1]=1;visted[1]=1;
for(int t=2;t<=n;t++)//获得第i个点
{ int mindist=INT_MAX;
for(int i=1;i<t;i++)//在已选取的点中,找dist最小的
{
for(int j=1;j<=n;j++)
{
if(dist[load[i]][j]<mindist&&visted[j]!=1)
{ mindist=dist[load[i]][j];
k=j;
}
}
}
load[t]=k;
visted[k]=1;
ans+=mindist;
}
cout<<ans<<endl;
}
return 0;
}