/* MST 水题!*/
#include<cstring>
#include<cstdio>#define INF 1<<30
int map[30][30],low[30],vis[30];
int n;
int prim()
{
int ans=0;
for(int i = 0; i <= n; i++)
low[i] = map[1][i];
vis[1] = 1;
for(int i = 1; i < n; i++)
{
int temp = INF,pos=-1;
for(int j = 0; j < n; j++)
if(!vis[j]&&temp>low[j])
{
temp=low[j];
pos = j;
}
//if(pos==-1) return -1;
vis[pos] = 1;
ans += low[pos];
for(int j = 0; j < n; j++)
if(!vis[j]&&low[j]>map[pos][j])
low[j] = map[pos][j];
}
return ans;
}
int main()
{
char ch[2],cha[2];
int cm,cma;
while(scanf("%d",&n),n)
{
memset(vis,0,sizeof(vis));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
map[i][j] = INF;
for(int i = 1; i < n; i++)
{
scanf("%s %d",&ch,&cm);
int x = ch[0]-'A';
while(cm--)
{
scanf("%s %d",&cha,&cma);
int y = cha[0]-'A';
if(cma<map[x][y])
map[x][y] = map[y][x] = cma;
}
}
printf("%d\n",prim());
}
return 0;
}