func_code_string: #include <bits/stdc++.h>   using namespace std;   pair<int, int> T[4 * 200005];   void update(int n, int b, int e, int p, int v) {     if (b == p && e == p) {       T[n] = make_pair(v, p);     } else {       int m = (b + e) / 2;       if (p <= m)         update(2 * n, b, m, p, v);       else         update(2 * n + 1, m + 1, e, p, v);       T[n] = max(T[2 * n], T[2 * n + 1]);     }   }   pair<int, int> query(int n, int b, int e, int l, int r) {     if (b == l && e == r) {       return T[n];     } else {       int m = (b + e) / 2;       if (m >= r) return query(2 * n, b, m, l, r);       if (l > m) return (query(2 * n + 1, m + 1, e, l, r));       return max(query(2 * n, b, m, l, m), query(2 * n + 1, m + 1, e, m + 1, r));     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     int n;     cin >> n;     vector<pair<pair<int, int>, int> > arr(n);     vector<pair<int, int> > ori(n);     int a, b;     for (int i = 0; i < n; i++) {       cin >> a >> b;       arr[i] = make_pair(make_pair(a, b), i);       ori[i] = make_pair(a, b);     }     sort(arr.begin(), arr.end());     priority_queue<pair<int, int> > q;     vector<int> result1(n);     vector<int> result2(n);     int index = 0;     map<int, int> comp;     for (int i = 1; i <= n; i++) {       while (index < n && arr[index].first.first == i) {         q.push(make_pair(-1 * arr[index].first.second, arr[index].second));         index++;       }       pair<int, int> current = q.top();       q.pop();       result1[current.second] = i;       comp[i] = current.second;     }     for (int i = 0; i < n; i++) {       result2[i] = result1[i];     }     bool one = true;     for (int i = 1; i <= n; i++) {       int l = ori[comp[i]].first;       int r = ori[comp[i]].second;       pair<int, int> res = query(1, 0, 200005, l, r);       if (res.first >= i) {         one = false;         result2[comp[i]] = result1[comp[res.second]];         result2[comp[res.second]] = result1[comp[i]];         break;       }       update(1, 0, 200005, i, r);     }     if (one) {       cout <<  YES  <<   n ;       for (int i = 0; i < n; i++) {         cout << result1[i] <<    ;       }       cout <<   n ;     } else {       cout <<  NO  <<   n ;       for (int i = 0; i < n; i++) {         cout << result1[i] <<    ;       }       cout <<   n ;       for (int i = 0; i < n; i++) {         cout << result2[i] <<    ;       }       cout <<   n ;     }     return 0;   }   