#include <iostream>
#include<vector>
#include<utility>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define MAN 30
vector<char>C[MAN];
int Father[MAN];
struct road
{
char t1;
char t2;
int dis;
};
bool cmp(struct road st1,struct road st2)
{
return st1.dis<st2.dis;
}
vector<struct road>v1;
int vertex;
int Find(int x)
{
return Father[x]==x?x:Find( Father[x]);
}
bool Union(int x,int y)
{
int ex=Find(x);
int ey=Find(y);
if(ex==ey)
return false;
else
{
Father[ex]=ey;
return true;
}
}
int main()
{
while(~ scanf("%d",&vertex)&&vertex)
{
int sum=0;
v1.clear();
scanf("%d",&vertex);
for(int i=0;i<vertex;i++)
Father[i]=i;
for(int i=0;i<vertex-1;i++)
{
char temp1;int t1;
cin>>temp1>>t1;
for(int j=0;j<t1;j++)
{
char temp2;int t2;
cin>>temp2>>t2;
struct road st;
st.dis=t2;
st.t1=temp1;
st.t2=temp2;
v1.push_back(st);
}
}
sort(v1.begin(),v1.end(),cmp);
for(int i=0;i<v1.size();i++)
{
if(Union(v1[i].t1-'A',v1[i].t2-'A'))
sum+=v1[i].dis;
}
cout << sum << endl;
}
return 0;
}