#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct edge{
    int x;
    int y;
    int weight;
    edge(int x,int y,int w):x(x),y(y),weight(w){}
};

const int N = 100;
int father[N];
int height[N];

void Init(int n){
    for (int i = 0; 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 a,int b,int w,int &total){
    a = Find(a);
    b = Find(b);
    if (a!=b){
        total += w;
        if (height[a] > height[b]){
            father[b] = a;
        } else if (height[a] < height[b]){
            father[a] = b;
        } else{
            father[b] = a;
            height[a]++;
        }
    }
}

bool compare(edge lhs,edge rhs){
    return lhs.weight < rhs.weight;
}

int main(){
    int n,x,y,w;
    vector<edge> eV;
    while (cin>>n){
        if (n==0) break;

        Init(n);
        for (int i = 0; i < n*(n-1)/2; ++i) {
            cin>>x>>y>>w;
            eV.push_back(edge(x,y,w));
        }
        sort(eV.begin(),eV.end(), compare);
        int total = 0;
        for (int i = 0; i < n*(n-1)/2; ++i) {
            Union(eV[i].x,eV[i].y,eV[i].weight,total);
        }
        cout<<total<<endl;
    }
}