#include #include #include #include #include #include #undef MINDCODING #define MINDCODING #define FILEIN "ticket.in" #define FILEOUT "ticket.out" #define NMAX 105 using namespace std; map NameToID; pair IDToName[NMAX]; int n, m, t; queue Queues[NMAX]; int QueueID[NMAX]; bool Status[NMAX]; char c_name[25], c_surname[25]; int main() { #ifndef MINDCODING freopen(FILEIN, "r", stdin); freopen(FILEOUT, "w", stdout); #endif // MINDCODING scanf("%d %d", &n, &m); for ( int i = 1; i <= m; i++ ) { scanf("%s %s", &c_name, &c_surname); string name(c_name), surname(c_surname); NameToID[name] = i; NameToID[surname] = i; IDToName[i] = make_pair(name, surname); } for ( int i = 1; i <= n; i++ ) QueueID[i] = -1; scanf("%d", &t); while(t--) { int op; scanf("%d", &op); int x; char c_y[25]; if (op == 1) { scanf("%d", &x); Status[x] = !Status[x]; if (!Status[x]) { while(!Queues[x].empty()) QueueID[Queues[x].front()] = -1, Queues[x].pop(); } } else if (op == 2) { scanf("%d %s", &x, &c_y); string y(c_y); if (Status[x] && NameToID.find(y) != NameToID.end()) Queues[x].push(NameToID[y]), QueueID[NameToID[y]] = x; } else if (op == 3 ) { scanf("%d", &x); QueueID[Queues[x].front()] = -1, Queues[x].pop(); } else if (op == 4 ){ scanf("%d", &x); queue tmpqueue(Queues[x]); stack tmpstack; while (!tmpqueue.empty()) { tmpstack.push(tmpqueue.front()); tmpqueue.pop(); } if (tmpstack.size() == 0) printf("-1"); char *c1, *c2; while (!tmpstack.empty()) { c1 = (char *) (IDToName[tmpstack.top()].first.c_str()), c2 = (char *) (IDToName[tmpstack.top()].second.c_str()); printf("%s %s ", c1, c2); tmpstack.pop(); } printf("\n"); } else if (op == 5) { scanf("%s", &c_y); string y(c_y); if (NameToID.find(y) == NameToID.end()) printf("-1\n"); else { int q_x = QueueID[NameToID[y]]; printf("%d\n", q_x); } } } return 0; }