#include #include #include using namespace std; template bool maxPointer(T& a, T b) { if (a < b) {a = b;return true;}return false;} template int maxReturn(T a, T b) {if (a > b) {return a;} else {return b;}} template bool minPointer(T& a, T b) {if (a < b) {a = b;return true;}return false;} const int seatCount = 20; class costmer { private : vector wantList; bool existFlag = false; public : bool checkExist() { return existFlag; } void setExitst() { existFlag = true; } void setWantList(string item) { wantList.push_back(item); } bool searchWantList(string item) { vector::iterator i = wantList.begin(); vector::iterator end = wantList.end(); for (; i != end; i++) { if (item == *i) { deleteWantList(i); return true; } } return false; } void deleteWantList(vector::iterator i) { wantList.erase(i); } void leave() { wantList.clear(); existFlag = false; } }; int main(void){ int N; cin >> N; costmer costmerList[seatCount]; for (int i = 0; i < N; i++) { int type,n,m,C; string B; cin >> type; switch (type) { case 0 : cin >> n >> m; costmerList[n-1].setExitst(); for (int j = 0; j < m; j++) { string wantitem; cin >> wantitem; costmerList[n-1].setWantList(wantitem); } break; case 1 : cin >> B; int ans; ans = -1; for (int j = 0; j < seatCount; j++) { if (costmerList[j].checkExist()) { if (costmerList[j].searchWantList(B)) { ans = j + 1; break; } } } cout << ans << endl; break; case 2 : cin >> C; costmerList[C-1].leave(); break; } } }