#include <stdio.h>
#include <vector>

using namespace std;

typedef struct edge{
	int to;
	int length;
} Edge;

vector<Edge> toEdges[10010];
int n;

typedef struct dpret{
	int nodeDibawah;

	long long ongkosM;

	long long ongkosBlom;
} DPRet;

int visited[10010];

DPRet lalala(int pos, int edgeLen){

	visited[pos]=1;
	vector<DPRet> rets;
	long long toOngkosBlom = 0;
	int toNode = 0;

	for (int i=0;i<toEdges[pos].size();i++){
		if (!visited[toEdges[pos][i].to]){
			DPRet temp = lalala(toEdges[pos][i].to, toEdges[pos][i].length);
			rets.push_back(temp);
			toOngkosBlom+=temp.ongkosBlom;
			toNode+=temp.nodeDibawah;
		}
	}

	DPRet res;
	toNode += 1;
	res.nodeDibawah = toNode;

	// kaga ada M
	res.ongkosBlom = toOngkosBlom + toNode*edgeLen;

	// gue jadi M
	long long toM=toOngkosBlom;

	// ambil anak atu jadi M
	for (int i=0;i<rets.size();i++){
		long long ttoM = toOngkosBlom - rets[i].ongkosBlom + rets[i].ongkosM;
		int ttoNode = toNode - rets[i].nodeDibawah;

		if (ttoM  <= toM ){
			toM = ttoM;
		}
	}
	
	res.ongkosM = toM + (n-toNode) * edgeLen;

	return res;
}

int main(){
	while(scanf("%d", &n)!=EOF){
		if (!n) break;

		memset(visited, 0, sizeof(visited));

		if (!n) break;

		for (int i=0;i<n;i++){
			toEdges[i].clear();
		}

		for (int i=1;i<n;i++){
			Edge x;
			int a,b;
			scanf("%d%d%d", &a,&b,&x.length);
			x.to = b;
			toEdges[a].push_back(x);
			x.to = a;
			toEdges[b].push_back(x);
		}

		DPRet res = lalala(0,0);
		printf("%lld\n", res.ongkosM);
	}

	return 0;
}
