#include <iostream>
#include <fstream>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <bitset>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <utility>
#include <string>
#include <iomanip>
#include <cstring>
#include <cmath>

#define vint vector<int>::iterator
#define vintp vector<pair<int,int> >::iterator
#define ll long long
#define maxn 251
#define mod 329885391853LL

using namespace std;

ifstream fin ("A.in");
ofstream fout("A.out");

string name[201],surname[201];
map <string,int> M,MM;
int q[201][201];
int st[201],l[201]; int state[201];
int wh[201],n,m,t,op,x;
string N;

int main()
{
    cin>>n>>m;

    for (int i=1; i<=n; ++i)
        st[i] = 1;

    for (int i=1; i<=m; ++i)
    {
        cin>>name[i]>>surname[i];

        M.insert (make_pair(name[i],i));
        MM.insert (make_pair(surname[i],i));
    }

    cin>>t;

    for (int i=1; i<=t; ++i)
    {
        cin>>op;

        if (op == 1)
        {
            cin>>x;

            state[x] = 1 - state[x];

            if (state[x] == 0)
            {
                for (int j=st[x]; j<=l[x]; ++j)
                    wh[q[x][j]] = 0;

                st[x] = l[x] + 1;
            }
        }

        else if (op == 2)
        {
            cin>>x>>N;

            map<string,int>::iterator it = M.find(N);

            if (it != M.end())
            {
                q[x][++l[x]] = it->second;
                wh[it->second] = x;
            }
            else
            {
                it = MM.find(N);
                q[x][++l[x]] = it->second;
                wh[it->second] = x;
            }
        }

        else if (op == 3)
        {
            cin>>x;
            wh[q[x][st[x]]]= 0;
            ++st[x];
        }

        else if (op == 4)
        {
            cin>>x;

            if (st[x] > l[x])
              cout<<-1;
              else for (int j = l[x]; j >= st[x]; --j)
                cout<<name[q[x][j]]<<" "<<surname[q[x][j]]<<" ";
              cout<<"\n";
        }

        else
        {
            cin>>N;

            map<string,int>::iterator it = M.find(N);

            if (it != M.end())
            {
                x = it->second;
            }
            else
            {
                it = MM.find(N);
                x = it->second;
            }

            if (wh[x] == 0)
                cout<<-1;
            else cout<<wh[x];
            cout<<"\n";
        }
    }
}