#include<bits/stdc++.h>
using namespace std;
int n, a[110];
void f(int x) { // 不仅作为一个参数,代表了当前的递归层数
if (x > n) { // x的值超过n的时候,说明已经递归了n次了,已经有n个循环了
// 如何判断方案合法性,以及如何输出
for (int i=1;i<=n;i++) printf("%d ",a[i]);
printf("\n");
// 判断,a[1]~a[n]中没有相同数字,符合的话,才输出
return;
}
for (int i=1;i<=n;i++) {
// 如何将不同递归层数当中的枚举出来的数存下来 (设定全局变量)
a[x] = i; // 记录,第x层递归枚举出来的数是i
f(x+1);
}
} // n个1~n的循环在嵌套
int main() {
scanf("%d",&n);
// n个循环嵌套,每个循环是1~n,最终删去相同元素方案
f(1);
/*
for (int i=1;i<=3;i++) {
for (int j=1;j<=3;j++) {
for (int k=1;k<=3;k++) {
//如果存在相同数字,continue
if (i==j || j==k || i==k) continue;
printf("%d %d %d\n",i,j,k);
}
}
} // 暴力填数思想 + 筛选答案思想、
*/
return 0;
}