func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const long long LINF = 0x3f3f3f3f3f3f3f3fll;   template <bool directed>   struct Euler {     int N;     vector<vector<pair<int, int>>> adj;     vector<vector<pair<int, int>>::iterator> its;     vector<bool> used;     Euler(int N_) : N(N_), adj(N), its(N) {}     void ae(int a, int b) {       int M = used.size();       used.push_back(0);       adj[a].emplace_back(b, M);       if (!directed) adj[b].emplace_back(a, M);     }     vector<pair<int, int>> solve(int src = 0) {       while (!adj[src].size()) src++;       for (int i = 0; i < N; i++) its[i] = begin(adj[i]);       vector<pair<pair<int, int>, int>> ret, second = {{{src, -1}, -1}};       while (second.size()) {         int x = second.back().first.first;         auto &it = its[x], en = end(adj[x]);         while (it != en && used[it->second]) it++;         if (it == en) {           if (ret.size() && ret.back().first.second != x) return {};           ret.push_back(second.back()), second.pop_back();         } else {           second.push_back({{it->first, x}, it->second});           used[it->second] = 1;         }       }       if (ret.size() != used.size() + 1) return {};       vector<pair<int, int>> ans;       for (auto& t : ret) ans.push_back({t.first.first, t.second});       reverse(ans.begin(), ans.end());       return ans;     }   };   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int N;     cin >> N;     vector<pair<int, int>> v(N);     for (auto& i : v) cin >> i.first >> i.second;     for (int i = 20; i >= 0; i--) {       Euler<false> E(1 << i);       for (auto [l, r] : v) E.ae(l & ((1 << i) - 1), r & ((1 << i) - 1));       auto ans = E.solve();       if (!ans.size()) continue;       if (ans[0].first != ans.back().first) continue;       ans.erase(ans.begin());       cout << i <<   n ;       for (auto [j, id] : ans) {         int a = 2 * id + 1, b = 2 * id + 2;         if ((v[id].first & ((1 << i) - 1)) == j) swap(a, b);         cout << a <<     << b <<    ;       }       cout <<   n ;       break;     }     exit(0);   }   