#include #include int n, m; int p[1005], u[1005]; int q[205][2000]; int nr[200], v[200], viz[200]; char s[200][200]; int find (char st[]) { int i, j, k, lim = strlen (st + 1); for (i = 1; i <= m; i ++) { for (j = 1; j <= nr[i]; j ++) { for (k = 1; k <= lim; k ++) if (s[i][j + k - 1] != st[k]) break; if (k == lim + 1) return i; } } return 0; } int main () { #ifndef ONLINE_JUDGE freopen ("ticket.in", "r", stdin); freopen ("ticket.out", "w", stdout); #endif scanf ("%d %d\n", &n, &m); int i, j, t, x, tip; for (i = 1; i <= m; i ++) { gets (s[i] + 1); nr[i] = strlen (s[i] + 1); } scanf ("%d", &t); for (i = 1; i <= m; i ++) v[i] = -1; for (i = 1; i <= n; i ++) p[i] = 1; v[0] = -1; char str[200]; while (t --) { scanf ("%d ", &tip); v[0] = -1; memset (str, 0, sizeof (str)); if (tip == 1) { scanf ("%d", &x); viz[x] = !viz[x]; if (viz[x] == 0) { for (i = p[x]; i <= u[x]; i ++) { v[q[x][i]] = -1; } u[x] = 0; p[x] = 1; } } if (tip == 2) { scanf ("%d ", &x); gets (str + 1); // if (viz[x]) // { u[x] ++; q[x][u[x]] = find (str); v[find (str)] = x; // } } if (tip == 3) { scanf ("%d", &x); if (p[x] <= u[x]) { v[q[x][p[x]]] = -1; p[x] ++; } } if (tip == 4) { scanf ("%d", &x); if (p[x] > u[x]) printf ("-1\n"); else { for (i = u[x]; i >= p[x]; i --) { for (j = 1; j <= nr[q[x][i]]; j ++) printf ("%c", s[q[x][i]][j]); if (i != p[x])printf (" "); } printf ("\n"); } } if (tip == 5) { memset (str, 0, sizeof (str)); gets (str + 1); printf ("%d\n", v[find (str)]); } } return 0; }