#include<iostream>
#include<map>
#include<cstring>
#define N 110
#define f cin
#define g cout
using namespace std;
int op,desc[N],pozs[N],i,poz[N],x,y,t,n,m,q[N][N];
string s[N][2],s1;
map<string,int>care;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;++i)
    {
        f>>s[i][0];
        care[s[i][0]]=i;
        f>>s[i][1];
        care[s[i][1]]=i;
    }
    f>>t;
    memset(poz,-1,sizeof(poz));
    for(;t;--t)
    {
        f>>op;
        if(op==1)
        {
            f>>x;
            desc[x]=!desc[x];
            if(!desc[x])
            {
                for(i=pozs[x];i<=q[x][0];++i)
                poz[q[x][0]]=-1;
                q[x][0]=0;
            }
            else
            {
                pozs[x]=1;
            }
        }
        else
        if(op==2)
        {
            f>>x>>s1;
            y=care[s1];
            q[x][++q[x][0]]=y;
            poz[y]=x;
        }
        else
        if(op==3)
        {
            f>>x;
            poz[q[x][pozs[x]]]=-1;
            ++pozs[x];
        }
        else
        if(op==4)
        {
            f>>x;
            if(pozs[x]>q[x][0])
            g<<-1;
            for(i=pozs[x];i<=q[x][0];++i)
            {
                g<<s[q[x][i]][0]<<' '<<s[q[x][i]][1]<<' ';
            }
            g<<'\n';
        }
        else
        {
            f>>s1;
            g<<poz[care[s1]]<<'\n';
        }
    }
    return 0;
}