#include using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, q; cin >> n >> q; map name2rate; map rate2name; set fixed, nfixed; while (q--) { int t; cin >> t; if (t == 1) { string s; int r; cin >> s >> r; rate2name[r] = s; name2rate[s] = r; nfixed.insert(r); } if (t == 2) { int x; cin >> x; n -= x; } if (t == 3) { string s; int x; cin >> s >> x; fixed.insert(name2rate[s]); nfixed.erase(name2rate[s]); n += x; } priority_queue, greater<>> pq; while (fixed.size() + nfixed.size() > n) { auto& rem = (!nfixed.empty() ? nfixed : fixed); int r = *rem.begin(); rem.erase(r); pq.push(r); } while (!pq.empty()) { int r = pq.top(); pq.pop(); cout << rate2name[r] << '\n'; } } return 0; }