1 #include <iostream>
2 #include <string>
3 #include <map>
4 #include <deque>
5 using namespace std;
6 map<string,string> coresp;
7 map<string,bool> e_nume;
8 deque<string> coada[105];
9 map<string,int> unde;
10
11 int main() {
12 int n,m,t,i,tip,x;
13 cin>>n>>m;
14 string nume,prenume;
15 for(i=0;i<m;i++) {
16 cin>>nume>>prenume;
17 coresp[nume]=prenume,coresp[prenume]=nume;
18 e_nume[nume]=1;
19 unde[nume]=-1;
20 }
21 cin>>t;
22 for(i=0;i<t;i++){
23 cin>>tip;
24 if(tip==1) {
25 cin>>x;
26 deque<string>::iterator it;
27 for(it=coada[x].begin();it!=coada[x].end();it++)
28 unde[*it]=-1;
29 coada[x].clear();
30 } else if(tip==2){
31 cin>>x>>nume;
32 if(!e_nume[nume])
33 nume=coresp[nume];
34 unde[nume]=x;
35 coada[x].push_back(nume);
36 } else if(tip==3){
37 cin>>x;
38 unde[coada[x].front()]=-1;
39 coada[x].pop_front();
40 } else if(tip==5){
41 cin>>nume;
42 if(!e_nume[nume])
43 nume=coresp[nume];
44 cout<<unde[nume]<<'\n';
45 } else{
46 cin>>x;
47 if(coada[x].empty()){
48 cout<<"-1\n";
49 continue;
50 }
51 deque<string>::reverse_iterator it;
52 it=coada[x].rbegin();
53 cout<<*it<<' '<<coresp[*it];
54 for(it++;it!=coada[x].rend();it++)
55 cout<<' '<<*it<<' '<<coresp[*it];
56 cout<<'\n';}
57 }
58 return 0;
59 }
60
(Sursa de Andrei Constantinescu)