/* g++ -std=c++11 -Wall -O2 -o main.exe main.cpp main.exe */ #include #include #include #include #include #include #include #include #include //最大公約数: gcd() //最小公倍数: lcm() #define ll long long int using namespace std; bool flag1 = false, flag2 = true; template void in(T &t){ //標準入力 cin >> t; return; } template void sortasc(vector &v){ //vectorを昇順にソート sort(v.begin(), v.end(), std::greater()); return; } template void sortdesc(vector &v){ //vectorを降順にソート sort(v.begin(), v.end(), std::less()); return; } int main(){ int n, m, t1, t2; string temp; vector< map > sushi(21); scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &m); switch(m){ case 0: scanf("%d %d", &t1, &t2); for(int j = 0; j < t2; j++){ cin >> temp; sushi[t1][temp]++; } break; case 1: cin >> temp; for(int j = 1; j < 21; j++){ if(sushi[j][temp] > 0){ printf("%d\n", j); sushi[j][temp]--; j = -1; flag1 = true; break; } } if(!flag1) printf("%d\n", -1); flag1 = false; break; case 2: scanf("%d", &t1); sushi[t1].erase(sushi[t1].begin(), sushi[t1].end()); break; } } return 0; }