#include #include #include #include #include #include #include #define in cin #define out cout #define abs(x) ((x>0)?(x):(-(x))) #define max(a, b) (a > b ? a : b) #define min(a, b) (a < b ? a : b) #define FOR(i, a, b) for(int i = a; i <= b; ++i) #define DOWNFOR(i, a, b) for(int i = a; i >= b; --i) #define FOREACH(i, t) for (typeof(t.begin()) i = t.begin(); i != t.end(); ++i) #define ll long long using namespace std; const int Nmax = 200; int N,M,T; string S[2][Nmax]; int Part[Nmax]; int cine(string p){ for(int i=1;i<=M;i++) if(p==S[0][i] || p==S[1][i]) return i; return 0; } struct coada{ int v[Nmax]; int st,dr; int state; coada(){ st=1; dr=0; state=0; } void push(int k){ if(state) v[++dr]=k; } void close(){ for(int i=dr;i>=st;i--) Part[v[i]]=-1; dr=0; st=1; state=!state; } void serve(){ if(st<=dr){ Part[v[st]]=-1; st++; } } void print(){ if(st<=dr) for(int i=dr;i>=st;i--) out<>N>>M; for(int i=1;i<=M;i++){ in>>S[0][i]>>S[1][i]; Part[i]=-1; } in>>T; for(int i=1;i<=T;i++){ int t,x; string q; in>>t; if(t==1){ in>>x; A[x].close(); } if(t==2){ in>>x>>q; int k=cine(q); Part[k]=x; A[x].push(k); } if(t==3){ in>>x; A[x].serve(); } if(t==4){ in>>x; A[x].print(); } if(t==5){ in>>q; out<