Prim
#include <iostream>
#include <cmath>
using namespace std;
#define MAX 99999
#define LEN 101
int dist[LEN];
int map[LEN][LEN];
bool vis[LEN];
void init() {//初始化
int i,j;
for(i=0; i<LEN; i++) {
for(j=0; j<LEN; j++) {
if(i==j) map[i][j]=0; //对a[][]进行初始化,一般都要;
else map[i][j]=MAX;
}
}
}
//prim算法
int prim(int n) {
int i,j,min,pos;
int sum=0;
memset(vis,false,sizeof(vis));//初始化
for(i=1; i<=n; i++) {
dist[i]=map[1][i];
}//从1开始
vis[1]=true;
dist[1]=MAX;
//找到权值最小点并记录下位置
for(i=1; i<n; i++) {
min=MAX;
//pos=-1;
for(j=1; j<=n; j++) {
if(!vis[j] && dist[j]<min) {
min=dist[j];
pos=j;
}
}
sum+=dist[pos];//加上权值
vis[pos]=true;
//更新权值
for(j=1; j<=n; j++) {
if(!vis[j] && dist[j]>map[pos][j]) {
dist[j]=map[pos][j];
}
}
}
return sum;
}
int main() {
int n;
while(cin>>n) {
init();
//memset(map,MAX,sizeof(map));
if(n==0) break;
int i,j,a,b,d,state;
for(i=0; i<n*(n-1)/2 ; i++) {
// cin>>a>>b>>d;
scanf("%d%d%d",&a,&b,&d);
if(d<map[a][b]) {
map[a][b]=map[b][a]=d;
}
}
cout<<prim(n)<<endl;
}
return 0;
}