import random class node: def __init__(self,num): self.num = num self.left:node = None self.right:node = None def addNode(cur:node,input_num:int): #ノード追加,再帰でNoneになるまでたどっていく if (cur.num < input_num): if (cur.right is None): cur.right = node(input_num) else: addNode(cur.right,input_num) else: if (cur.left is None): cur.left = node(input_num) else: addNode(cur.left,input_num) def calcHeight(cur: node): if (cur is None): return -1 return max(calcHeight(cur.left),calcHeight(cur.right))+1 def main(): k = int(input()) lst = list(range(1,2**k)) while(1): random.shuffle(lst) for i,num in enumerate(lst): if i == 0: root = node(num) else: addNode(root,num) height = calcHeight(root) if (height > k and height <3*k): break print(*lst) if __name__ == "__main__": main()