#include<iostream>
using namespace std;
const int N=10;
int n;
int path[N];
void dfs(int u,int state)
{
if(u==n)//生成就输出
{
for(int i=0;i<n;i++)printf("%d ",path[i]);
puts("");
return;
}
for(int i=0;i<n;i++)//一个一个进行递归回溯,直到循环结束
if(!(state>>i&1))//代表输入数字的位掩码位是否为0,为0则表示对应的数字位未使用
{
path[u]=i+1;//更新每次的存储数组
dfs(u+1,state+(1<<i));//用递归层数和位掩码进行递归
}
}
int main()//读取用户输入的n,调用dfs从第0层、初始状态0(无数字被使用)开始生成排列
{
scanf("%d",&n);
dfs(0,0);
return 0;
}