#include <stdio.h> typedef 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 ",newnode->name); } char name[24]; for (int i = 1; i <= 100000; i++){ scanf("%s", &name); printf("%d ", searchn(name)); } }