#include <stdio.h>
#include <stdlib.h>
//定义全局变量
int *res = NULL;//存储结果准备打印的数组
int a_num = 0;//存储已经选择好的元素数量
int *flag = NULL;//用来标记是否已经取到i
//构建dfs回溯算法
void dfs(int n){
//终止条件
if(a_num == n){
//打印一种排列
for(int i = 0; i < n; i++){
printf("%d ",res[i]);
}
printf("\n");//换行
return;//返回
}
//遍历所有可能
for(int i = 1; i <= n; i++){
//加入结点并标记
if(flag[i - 1] == 0){
res[a_num] = i;
flag[i - 1] = 1;
a_num++;
//递归
dfs(n);
//撤销选择
a_num --;
flag[i - 1] = 0;
}
}
}
int main() {
//读取数据
int n;
scanf("%d\n", &n);
//为res和flag分配空间并赋初值
res = (int *)malloc(sizeof(int) * n);
flag = (int *)malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
res[i] = 0;
flag[i] = 0;
}
//调用深度优先搜索
dfs(n);
//释放空间
free(res);
free(flag);
return 0;
}