#include using namespace std; void print(vector & vec){ cout << vec[0]; for (int i = 1; i != vec.size(); ++i) cout << ' ' << vec[i]; cout << endl; } void dfs(int v, int K, vector &in_order){ if (v >= (1 << K)) return; dfs(v * 2, K, in_order); in_order.push_back(v); dfs(v * 2 + 1, K, in_order); } vector in_order_walk(int K){ vector in_order; dfs(1, K, in_order); return in_order; } int main() { cin.tie(0); ios::sync_with_stdio(false); int K; cin >> K; auto in_order = in_order_walk(K); int L = (1 << K) - 1; in_order[L - 1] = L / 2; in_order[L - 2] = L; in_order[L - 3] = L - 1; vector ans(L, 0); for (int i = 0; i != L; ++i){ ans[in_order[i] - 1] = i + 1; } print(ans); return 0; }