#include <stdio.h>
#include <string.h>
#include <vector>

#define NMAX 105

using namespace std;

struct person{char nume[25],prenume[25];int statie;bool ok;};
vector<int> Q[NMAX*5];
bool STATUS[NMAX];

person P[NMAX];

int N,M,T;

void read()
{
    scanf("%d %d\n",&N,&M);

    for (int i=1;i<=M;i++)
    {
        scanf("%s ",P[i].prenume);
        scanf("%s\n",P[i].nume);
    }

}

int find(char a[25])
{
    int len2=strlen(a);

    for (int i=1;i<=M;i++)
    {
        int len,ok=1;

        len=strlen(P[i].nume);
        if (len==len2)
            {for (int j=0;j<len;j++)
                if (P[i].nume[j]!=a[j])
                {
                    ok=0;
                    j=len+1;
                }}
        else ok=0;
        if (ok) return i;

        ok=1;
        len=strlen(P[i].prenume);
        if (len==len2)
            for (int j=0;j<len;j++)
                {if (P[i].prenume[j]!=a[j])
                {
                    ok=0;
                    j=len+1;
                }}
        else ok=0;
        if (ok) return i;
    }

    return 0;

}

void query4(int nr)
{
    for (int i=Q[nr].size();i>=0;i--)
        if (Q[nr][i]<=N && Q[nr][i]>=1)
            if (!P[Q[nr][i]].ok)
                printf("%s %s ",P[Q[nr][i]].prenume,P[Q[nr][i]].nume);
}

int main()
{
   // freopen ("in.txt","r",stdin);
  //  freopen ("out.txt","w",stdout);

    read();
    scanf("%d\n",&T);
    for (int i=1;i<=T;i++)
    {
        int type,nr;
        char a[25];

        scanf("%d ",&type);
        if (type==1)
        {
            scanf("%d\n",&nr);
            if (STATUS[nr]) {STATUS[nr]=0; Q[nr].clear();}
            else STATUS[nr]=1;
        }
        if (type==2)
        {
            scanf("%d ",&nr);
            scanf("%s\n",a);
            if (find(a))
            {
                Q[nr].push_back(find(a));
                P[find(a)].statie=nr;
            }
        }
        if (type==3)
        {
            scanf("%d ",&nr);
            P[Q[nr][0]].ok=1;
        }
        if (type==4)
        {
            scanf("%d ",&nr);
            query4(nr);
            printf("\n");
        }
        if (type==5)
        {
            scanf("%s\n",a);
            if (!find(a)) printf("-1\n");
            else
            {
                if (P[find(a)].statie && !P[find(a)].ok)
                    printf("%d\n",P[find(a)].statie);
            }
        }
    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}