#includetypedef struct node{ char name[24]; char id[19]; int num; node * pre; node * next;}node;node nhs[100004];node ihs[100004];node ihspool[100004];int iindex = 0;node * getinew(){ return &ihspool[iindex++];}node nhspool[100004];int nindex = 0;node * getnnew(){ return &nhspool[nindex++];}int getikey(char id[19]){ int x = 0; for (int i = 0; i <= 17; i++) x = (10 * x + (id[i] - '0')) % 100003; return x;}int getnkey(char name[24]){ int x = 0; for (int i = 0; i <= 22; i++) x = (26 * x + (name[i] - 'A')) % 100003; return x;}void inserti(int key, node * newnode){ node * head = &ihs[key]; newnode->pre = head; newnode->next = head->next; head->next = newnode; newnode->next->pre = newnode; head->num++;}void insertn(int key, node * newnode){ node * head = &nhs[key]; newnode->pre = head; newnode->next = head->next; head->next = newnode; newnode->next->pre = newnode; head->num++;}void init(){ for (int i = 0; i <= 100003; i++){ ihs[i].pre = &ihs[i]; ihs[i].next = &ihs[i]; ihs[i].num = 0; nhs[i].pre = &nhs[i]; nhs[i].next = &nhs[i]; nhs[i].num = 0; }}bool isame(char a[19], char b[19]){ int flag = true; for (int i = 0; i <= 17; i++){ if (a[i] != b[i]){ flag = false; break; } } return flag;}bool nsame(char a[24], char b[24]){ int flag = true; for (int i = 0; i <= 22; i++){ if (a[i] != b[i]){ flag = false; break; } } return flag;}node * searchi(char a[19]){ int key = getikey(a); int x = ihs[key].num; node * y = &ihs[key]; while (x--){ y = y->next; if (isame(a, y->id)) return y; }}int searchn(char name[24]){ int key = getnkey(name); int x = nhs[key].num; node * y = &nhs[key]; int num = 0; while (x--){ y = y->next; if (nsame(name, y->name)) num++; } return num;}int main(){ freopen("input.txt", "r", stdin); freopen( "result.txt","w",stdout); init(); for (int i = 1; i <= 100000; i++){ node * newnode=getinew(); scanf("%s %s", newnode->name,newnode->id); int key = getikey(newnode->id); inserti(key, newnode); node * newnnode = getnnew(); for (int i = 0; i <= 17; i++) newnnode->id[i] = newnode->id[i]; for (int i = 0; i <= 22;i++) newnnode->name[i] = newnode->name[i]; key = getnkey(newnnode->name); insertn(key, newnnode); } char id[19]; for (int i = 1; i <= 100000; i++){ scanf("%s", &id); node * newnode = searchi(id); printf("%s\n",newnode->name); } char name[24]; for (int i = 1; i <= 100000; i++){ scanf("%s", &name); printf("%d\n", searchn(name)); }}