#include <iostream>
#include <fstream>
#include <string>
using namespace std;

#define in cin
//ifstream in("2045.txt");

#define CANT 10001  // supongo q el número máximo de nodos q voy a leer es 10000
                    // además supongo que vienen numerados del 1 al 10000
                    // si con este número me da runtime error, lo agrando..
                    // (gracias javier por hacerme escribir este comentario)
                    // el enunciado no me dice el tamaño de la entrada :s

int veces[CANT] = {0}, padre[CANT], nivel[CANT];

inline int ancesCom(int par1, int par2) {   // para buscar el ancestro común
    while (nivel[par1] > nivel[par2])       // nivelo la profundidad de las ramas
        par1 = padre[par1];
    while (nivel[par2] > nivel[par1])
        par2 = padre[par2];
    while (par1 != par2) {                  // y mientras no llegue a un ancestro común
        par1 = padre[par1];                 // decremento el nivel de las 2 ramas
        par2 = padre[par2];
    }
    return par1;
}

int main() {
    int cant, papa, hijos, hijo, pares, par1, par2;
    char c;
    string str;
    while (getline(in, str) && str != "") {
        cant = atoi(str.c_str());
        for (int i = 1; i <= cant; i++) {
            in >> papa >> c >> c >> hijos >> c;
            if (i == 1)
                padre[papa] = nivel[papa] = 0;
            for (int j = 0; j < hijos; j++) {
                in >> hijo;
                padre[hijo] = papa;
                nivel[hijo] = nivel[papa]+1;
            }
        }
        in >> pares;
        for (int i = 0; i < pares; i++) {
            in >> c >> par1 >> par2 >> c;
            veces[ancesCom(par1, par2)]++;  // veces guarda la cantidad de veces que aparece un ancestro común
        }
        for (int i = 1; i <= cant; i++)
            if (veces[i] > 0) {
                cout << i << ":" << veces[i] << endl;
                veces[i] = 0;
            }
        getline(in, str);
    }
    //getchar();
    return 0;
}

