1406
//2621190 2011-08-10 10:31:25 Accepted 1406 C++ 0 184 ylwh!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#define N 27
using namespace std;
struct edge
{
int x, y;
int cost;
}e[N*N/2];
int root[N];
bool cmp(struct edge a, struct edge b)
{
return a.cost < b.cost;
}
int find_root(int x)
{
int temp;
temp = x;
while(temp != root[temp])
temp = root[temp];
root[x] = temp;
return temp;
}
int main()
{
int n, k, temp, flag, d[N], cnt;
int i, j, ans;
char ch;
while(scanf("%d", &n), n)
{
cnt = -1;
ans = 0;
for(i=0; i<n; i++)
root[i] = i;
for(i=0; i<n-1; i++)
{
scanf(" %c%d", &ch, &k);
temp = ch - 'A';
while(k--)
{
scanf(" %c%d", &ch, &flag);
e[++cnt].x = temp;
e[cnt].y = ch - 'A';
e[cnt].cost = flag;
}
}
sort(e, e+cnt+1, cmp);
int a, b;
for(i=0; i<=cnt; i++)
{
a = find_root(e[i].x);
b = find_root(e[i].y);
if(a != b)
{
root[b] = a;
ans += e[i].cost;
}
}
printf("%d\n", ans);
}
return 0;
}