#include #include #include using namespace std ; using ll = long long ; map memb ; map loc ; vector vs ; vector p ; int main() { int n ; cin >> n ; for (int i=0; i> v ; memb[v] = 1 ; loc[v] = i ; vs.push_back(v) ; } p.resize(n) ; cout << hex ; while (memb.size() > 0) { ll v = memb.rbegin()->first ; ll mask = v ; while (mask & (mask + 1)) mask |= mask >> 1 ; mask = mask - v ; auto r = memb.upper_bound(mask) ; if (r == memb.begin()) { cerr << "Off end" << endl ; exit(10) ; } r-- ; ll b = 1 ; while (2 * b <= r->first) b <<= 1 ; while (r->first & v) { if (r == memb.begin()) { cerr << "Off end" << endl ; exit(10) ; } ll t = r->first ; if (t == 0) { cerr << "Off end" << endl ; exit(10) ; } while ((b & t) == 0) b >>= 1 ; ll bb = b ; while ((bb & t & v) == 0) bb >>= 1 ; ll goal = ((t ^ bb) | (bb - 1)) ; r-- ; if (r->first > goal) { r = memb.upper_bound(goal) ; if (r == memb.begin()) { cerr << "Off end" << endl ; exit(10) ; } r-- ; } } ll v2 = r->first ; p[loc[v]] = v2 ; p[loc[v2]] = v ; memb.erase(v) ; memb.erase(v2) ; } cout << dec ; for (auto v : p) cout << v << endl ; }