# 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 createTree(lst: list, left: int, right: int): if left > right: return m = (left + right) // 2 lst.append(m) for i in range(left, m): lst.append(i) createTree(lst, m + 1, right) def main(): k = int(input()) lst = [] createTree(lst,1,(2**k)-1) # for i,num in enumerate(lst): # if i == 0: # root = node(num) # else: # addNode(root,num) # height = calcHeight(root) print(*lst) if __name__ == "__main__": main()