func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 200001;   int MAX[N];   vector<int> A[N];   int main() {     ios::sync_with_stdio(false);     set<pair<int, int> > S;     int n;     cin >> n;     for (int i = 0; i < n; i++) {       int u, v;       cin >> u >> v;       MAX[u] = v;       A[u].push_back(v);     }     for (int i = 1; i <= n; i++) {       if (MAX[i] > 0) S.insert({MAX[i], i});     }     int q;     cin >> q;     for (int i = 0; i < q; i++) {       int c;       cin >> c;       vector<int> temp;       for (int j = 0; j < c; j++) {         int u;         cin >> u;         temp.push_back(u);         S.erase({MAX[u], u});       }       if (S.size() > 1) {         pair<int, int> p = *S.rbegin(), p2;         S.erase(p);         temp.push_back(p.second);         p2 = *S.rbegin();         int l_lim = 0, u_lim = A[p.second].size();         while (l_lim < u_lim - 1) {           int cur = (l_lim + u_lim) / 2;           if (A[p.second][cur] > p2.first) {             u_lim = cur;           } else {             l_lim = cur;           }         }         if (A[p.second][l_lim] > p2.first) {           cout << p.second <<     << A[p.second][l_lim] <<   n ;         } else {           cout << p.second <<     << A[p.second][l_lim + 1] <<   n ;         }       } else if (S.size() == 1) {         pair<int, int> p = *S.rbegin();         cout << p.second <<     << A[p.second][0] <<   n ;       } else {         cout <<  0 0 n ;       }       while (!temp.empty()) {         if (MAX[temp.back()] > 0) S.insert({MAX[temp.back()], temp.back()});         temp.pop_back();       }     }     return 0;   }   