def dfs(u):
if u==n: # dfs停止条件:如果全排列path的位数已填满
print(" ".join(map(str,path)))
return
for i in range(1,n+1): # 从小到大遍历寻找第u个位置可以填的数
if st[i]==False:
st[i] = True # 更新状态
path[u] = i # 更新状态
dfs(u+1)
st[i]=False # 回溯
# 输入示例
n = int(input().strip())
st = [False for i in range(n+1)] # bool数组,表示第i个数是否被访问过
path = [0 for i in range(n)] # 记录某一排列的取值
dfs(0) # 从path的第0个位置开始深度优先搜索