#include <iostream>
using namespace std;
const int N = 10;
int path[N];//保存序列
bool state[N];//保存状态
int n;
void dfs(int u){
if(u>n){ //递归边界
for(int i = 1;i<=n;i++){ //输出序列
cout << path[i] << " ";
}
cout << endl;
}
for(int i = 1;i<=n;i++){
if(!state[i])//如果数字i没有没用过
{
path[u] = i;//将数字i放入序列
state[i] = 1;//标记数字i已经用过
dfs(u+1);//递归
state[i] = 0;//回溯
}
}
}
int main(void) {
cin >> n;//输入n
dfs(1);//从第一位开始
return 0;//结束
}