using namespace std;
const int n = 1100;
bool root[n];
bool vis[n];
int pre[n];
int bb[n];
vector <int> e[n];
vector <int> q[n];
int lca[n];
int t, n1;
int finn(int x)
{
int z, y = x;
while(y != pre[y])
{
y = pre[y];
}
while(x != pre[x])
{
z = pre[x];
pre[x] = y;
x = z;
}
return y;
}
void init()
{
memset(bb, 0, sizeof(bb));
for(int i = 0; i <= n1; i++)
{
q[i].clear();
e[i].clear();
root[i] = true;
vis[i] = false;
pre[i] = i;
}
int a, b, k;
for(int i = 1; i <= n1; i++)
{
scanf("%d:(%d)", &a, &k);
while(k--)
{
scanf("%d", &b);
e[a].push_back(b);
root[b] = false;
}
}
scanf("%d", &k);
int m = 1;
char ch;
while(scanf("%c", &ch) != EOF)
{
if(ch == '(')
{
scanf("%d%d", &a, &b);
getchar();
m++;
q[a].push_back(b);
q[b].push_back(a);
// printf("%d %d\n", m, k);
if(m > k)
{
break;
}
}
}
return;
}
void dataprocess(int x)
{
lca[x] = x;
int len = e[x].size();
for(int i = 0; i < len; i++)
{
dataprocess(e[x][i]);
pre[e[x][i]] = x;
}
vis[x] = true;
len = q[x].size();
for(int i = 0; i < len; i++)
{
if(vis[q[x][i]])
{
int g = lca[finn(q[x][i])];
//printf("%d\n", g);
bb[g]++;
}
}
}
int main()
{
while(scanf("%d", &n1) != EOF){
init();
for(int i = 1; i <= n1; i++)
{
if(root[i])
{
dataprocess(i);
}
}
for(int i = 1; i <= n1; i++)
{
if(bb[i]!= 0)
{
printf("%d:%d\n", i, bb[i]);
}
}
}
}