#include <vector>
using namespace std;
vector<long long> preorder;
void f(int n, long long _start, long long _end)
{
if (n == 0) return;
long long rootVal = _end;
preorder.push_back(rootVal);
long long mid = (_start + _end) / 2;
f(n - 1, _start, mid -1);
f(n - 1, mid, _end -1);
}
int n;
int main(void)
{
cin >> n;
f(n, 1, (1LL << n) - 1);
for (int i = 0; i < int(preorder.size()); ++i) {
cout << preorder[i] << (i == int(preorder.size() - 1) ? "" : " ");
}
cout << endl;
return 0;
}