#define N 1000
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int father[N];
int height[N];
struct Edge {
    int x;
    int y;
    int weight;
};
void Init(int n) {
    for (int i = 1 ; i <= n ; ++i) {
        father[i] = i ;
        height[i] = 1 ;
    }
}
int Find(int x) {
    if (x != father[x]) {
        father[x] = Find(father[x]);
    }
    return father[x];
}
void Union(int x, int y, int weight, int& total) {
    x = Find(x);
    y = Find(y);
    if (x != y) {
        total += weight;
    }
    if (height[x] < height[y]) {
        father[x] = y ;
    } else if (height[x] > height[y]) {
        father[y] = x ;
    } else {
        father[x] = y;
        ++height[y];
    }
}
bool comp(Edge lhs, Edge rhs) {
    if (lhs.weight < rhs.weight) {
        return true;
    } else {
        return false;
    }
}
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n == 0) {
            break;
        }
        Init(n);
        vector<Edge> vec;
        for (int i = 0 ; i < (n - 1)*n / 2 ; ++i) {
            Edge edge;
            scanf("%d%d%d", &edge.x, &edge.y, &edge.weight);
            vec.push_back(edge);
        }
        sort(vec.begin(), vec.end(), comp); //按照权值大小排序
        int total = 0 ;
        for (int i = 0 ; i < (n - 1)*n / 2 ; ++i) {
            Union(vec[i].x, vec[i].y, vec[i].weight, total);
        }
        printf("%d\n", total);
    }
}