#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define MAXN 26*26*26*10+1
int getid(char name[]){
int id = 0;
for(int i = 0; i < 3; i++){
id = id * 26 + name[i] - 'A';
}
id = id * 10 + name[3] - '0';
return id;
}
vector<int> selectcourse[MAXN];
int main(){
int n, k;
char name[5];
scanf("%d %d", &n, &k);
for(int i = 0; i < k; i++){
int course,x;
scanf("%d %d", &course, &x);
for(int j = 0; j < x; j++){
scanf("%s", &name);
int id = getid(name);
selectcourse[id].push_back(course);
}
}
for(int i = 0; i < n; i++){
scanf("%s", &name);
int id = getid(name);
printf("%s %d", name, selectcourse[id].size());
sort(selectcourse[id].begin(),selectcourse[id].end());
for(int j = 0; j < selectcourse[id].size(); j++){
printf(" %d", selectcourse[id][j]);
}
printf("\n");
}
return 0;
}
vector selectcourse[MAXN];,并不先申请MAXN个内存空间大小,用多少内存才申请多少内存,故此初始化不会加大内存占有