#include <stdio.h>
int n;
int path[10]; // 当前排列
int used[10]; // 标记数字是否已使用
// DFS生成排列
void dfs(int u) {
// 终止条件:填满了n个数
if (u == n) {
for (int i = 0; i < n; i++) {
printf("%d", path[i]);
if (i < n - 1) printf(" ");
}
printf("\n");
return;
}
// 按顺序尝试 1~n
for (int i = 1; i <= n; i++) {
if (!used[i]) { // 如果数字i还没用过
path[u] = i; // 填入当前位置
used[i] = 1; // 标记为已使用
dfs(u + 1); // 填下一个位置
used[i] = 0; // 回溯:恢复状态******************************************
}
}
}
int main() {
scanf("%d", &n);
dfs(0); // 从第0个位置开始填
return 0;
}