#include #include #include #include #include #include #include using namespace std; #define Nmax 128 string firstName[Nmax], lastName[Nmax], name; int N, M, T, x, op; list queue[Nmax]; int where[Nmax]; char state[Nmax]; map H; int main() { freopen("test.in", "r", stdin); scanf("%d %d", &N, &M); for (int i=1; i<=M; ++i) { cin >> firstName[i] >> lastName[i]; H[firstName[i]] = i; H[lastName[i]] = i; } scanf("%d", &T); while (T--) { scanf("%d", &op); switch (op) { case 1: scanf("%d", &x); state[x] ^= 1; if (state[x] == 0) { for (list::iterator it = queue[x].begin(); it != queue[x].end(); ++it) where[*it] = 0; queue[x].clear(); } break; case 2: cin >> x >> name; queue[x].push_back(H[name]); where[H[name]] = x; break; case 3: scanf("%d", &x); queue[x].pop_front(); break; case 4: scanf("%d", &x); if (queue[x].size() == 0) printf("-1\n"); else { for (list::reverse_iterator it = queue[x].rbegin(); it != queue[x].rend(); ++it) { if (it != queue[x].rbegin()) printf(" "); printf("%s %s", firstName[*it].c_str(), lastName[*it].c_str()); } printf("\n"); } break; case 5: cin >> name; x = H[name]; if (where[x]) printf("%d\n", where[x]); else printf("-1\n"); break; } } return 0; }