1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <cmath>
5 #include <algorithm>
6 #include <climits>
7 #include <vector>
8 #include <queue>
9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 const int maxn = 1000;
18 struct arc{
19 int u,v,w;
20 arc(int x = 0,int y = 0,int z = 0){
21 u = x;
22 v = y;
23 w = z;
24 }
25 };
26 int n,m,uf[maxn];
27 arc e[maxn];
28 char s[5];
29 bool cmp(const arc &x,const arc &y){
30 return x.w < y.w;
31 }
32 int Find(int x){
33 if(x != uf[x]) uf[x] = Find(uf[x]);
34 return uf[x];
35 }
36 int Kruskal(){
37 for(int i = 0; i <= n; i++) uf[i] = i;
38 sort(e,e+m,cmp);
39 int ans = 0;
40 for(int i = 0; i < m; i++){
41 int x = Find(e[i].u);
42 int y = Find(e[i].v);
43 if(x != y){
44 ans += e[i].w;
45 uf[x] = y;
46 }
47 }
48 return ans;
49 }
50 int main() {
51 int i,j,k,u,v,w;
52 while(scanf("%d",&n),n){
53 m = 0;
54 for(i = 1; i < n; i++){
55 scanf("%s %d",s,&k);
56 u = s[0]-'A'+1;
57 for(j = 0; j < k; j++){
58 scanf("%s %d",s,&w);
59 v = s[0]-'A'+1;
60 e[m++] = arc(u,v,w);
61 }
62 }
63 printf("%d\n",Kruskal());
64 }
65 return 0;
66 }