def dfs(u):#找第u位数
if u==n:
for c in path:
print(c+1,end=' ')
print()
else:
for i in range(n):
if not st[i]:#如果当前遍历到的这个数没用过
path[u]=i #就把这个数填到第u位
st[i]=True #标记i 这个数用过了
dfs(u+1) #找下一位数,开枝散叶
path[u]=0 #恢复现场,以便其他平行世界使用i这个数
st[i]=False
n=int(input())
path=[0 for i in range(n)]
st=[False for i in range(n)]
dfs(0)