K = gets.to_i V = [*1..2 ** K - 1] def dfs(vs, h = 0) len = vs.size return vs if len == 1 return vs if h + len <= 3 * K mid = len / 2 [vs[mid]] + dfs(vs[...mid], h + 1) + dfs(vs[mid + 1..], h + 1) end puts dfs(V).join(' ')