模板
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 155;
struct node
{
int u;
int v;
int w;
}a[maxn];
int pre[maxn/2];
bool cmp(node a, node b)
{
return a.w < b.w;
}
int find(int a)
{
if(pre[a] == a) return a;
else return find(pre[a]);
}
int join(int a, int b)
{
int i = find(a);
int j = find(b);
if(i != j){
pre[i] = j;
return 1;
}
return 0;
}
int main()
{
int n;
while(scanf("%d", &n) != EOF && n)
{
for(int i = 1; i <= n; i ++)
pre[i] = i;
char aa, b;
int weight;
int num;
int cnt = 0;
for(int i = 1; i < n; i ++)
{
//getchar();
cin>>aa;
scanf("%d", &num);
for(int j = 1; j <= num; j ++)
{
cin>>b;
scanf("%d", &weight);
a[++ cnt].u = (int)(aa-'A')+1;
a[cnt].v = (int)(b-'A')+1;
a[cnt].w = weight;
}
//cout<<1<<endl;
}
sort(a+1, a+1+cnt, cmp);
int tot = 0;
int ans = 0;
for(int i = 1; i <= cnt; i ++)
{
if(tot == n)
{
break;
}
if(join(a[i].u, a[i].v))
{
tot ++;
ans += a[i].w;
}
}
printf("%d\n", ans);
}
return 0;
}