#include <stdio.h>
#include <algorithm>
#define N 101
using namespace std; //使用sort函数必须要加上
struct Point
{
int a;
int b;
int c;
}point[4951];
bool cmp(Point A, Point B) //sort的自定义排序函数
{
return A.c < B.c;
}
int t[N];
int findRoot(int x)
{
if(t[x] == x)
return x;
else
{
//若达到了递归结束的条件,则每一层递归返回值都是根节点编号
int temp = findRoot(t[x]);
t[x] = temp;
return temp;
}
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if(n == 0)
break;
for(int i = 1; i <= N; i++)
t[i] = i;
for(int i = 1; i <= n*(n-1)/2; i++)
scanf("%d%d%d", &point[i].a, &point[i].b, &point[i].c);
//从小到大排序
sort(point+1, point+1+n*(n-1)/2, cmp);
int a, b;
int ans = 0;
for(int i = 1; i <= n*(n-1)/2; i++)
{
a = findRoot(point[i].a);
b = findRoot(point[i].b);
if(a != b)
{
t[a] = b;
ans += point[i].c;
}
//若a==b则说明前面已经把a和b加入最小生成树了
}
printf("%d\n", ans);
}
return 0;
}