//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" int n, m, test; VS fullNames; map firstToFull; map nameToCounter; vector counters; VB counterState; int main() { //Read data //freopen(IN_FILE, "r", stdin); //freopen(OUT_FILE, "w", stdout); cin >> n >> m; fullNames.RS(m + 1); FOR(i, 0, m) getline(cin, fullNames[i]); FOR(i, 1, m) { string firstName = fullNames[i].substr(0, fullNames[i].find(" ")); string secondName = fullNames[i].substr(fullNames[i].find(" ") + 1, 200); firstToFull[firstName] = fullNames[i]; firstToFull[secondName] = fullNames[i]; nameToCounter[fullNames[i]] = -1; } counters.RS(n + 1); counterState.RS(n + 1, false); cin >> test; FOR(t, 1, test) { int op; cin >> op; if (op == 1) { int ind; cin >> ind; counterState[ind] = !counterState[ind]; if (!counterState[ind]) { FORN(i, counters[ind].SZ) nameToCounter[counters[ind][i]] = -1; counters[ind].CL; } } if (op == 2) { int ind; string firstName; cin >> ind; getline(cin, firstName); firstName.erase(0, 1); counters[ind].PB(firstToFull[firstName]); nameToCounter[firstToFull[firstName]] = ind; } if (op == 3) { int ind; cin >> ind; if (counters[ind].SZ) { nameToCounter[counters[ind][0]] = -1; counters[ind].erase(counters[ind].BG); } } if (op == 4) { int ind; cin >> ind; if (counters[ind].SZ == 0) cout << "-1" << endl; else { FORD(i, counters[ind].SZ - 1, 0) cout << counters[ind][i] << " "; cout << endl; } } if (op == 5) { string name; getline(cin, name); name.erase(0, 1); cout << nameToCounter[firstToFull[name]] << endl; } } //Solve //Write data return 0; }