// DFS - 排列数字
#include<iostream>
using namespace std;
const int N = 10;
int n;
int path[N]; // 该条路径上的数字排列
bool st[N]; // 检查该数字是否用过,初始化为false,即未用过
void dfs(int u)
{
// 该排列枚举已完成,输出该情况的排列
if (u == n)
{
for (int i = 0; i < n; i++) printf("%d ", path[i]);
puts("");
return;
}
for (int i = 1; i <= n;i++)
if (!st[i])
{
path[u] = i;
st[i] = true;
dfs(u + 1);
st[i] = false; // 递归每返回一次,st[i]就置为false,返回原来没用过的状态,为下一次枚举所用
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}