n = int(input()) b = [False] * (n + 1) # 下标 1~n,所以长度 n+1 更方便 path = [] def dfs(): if len(path) == n: print(' '.join(map(str, path))) return for i in range(1, n + 1): if not b[i]: b[i] = True # 即这个深度放 刚访问的i path.append(i) dfs() # 深度+1,当深度到给出的长度时得到排列 path.pop() b[i] = False # 再把刚访问的i置为未访问过,下次用 dfs()