#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
int queryNum, courseNum;
set<int> take[26 * 26 * 26 * 10];
int getPos(char *name) { //将三个大写字母、一个数字组成的名字hash到数组中
return ( (name[0] - 'A') * 26 * 26 + (name[1] - 'A') * 26 + (name[2] - 'A') ) * 10 + (name[3] - '0');
}
int main() {
scanf("%d %d", &queryNum, &courseNum);
char name[5];
for (int i = 0;i < courseNum;i++) {
int courseId, studentNum;
scanf("%d %d", &courseId, &studentNum);
for (int j = 0;j < studentNum;j++) {
scanf("%s", &name);
take[getPos(name)].insert(courseId);
}
}
for (int i = 0;i < queryNum;i++) {
scanf("%s", &name);
set<int> *p = &take[getPos(name)];
printf("%s %d", name, p->size());
for (set<int>::iterator it = p->begin();it != p->end();it++) {
printf(" %d", *it);
}
printf("\n");
}
}