//《算法竞赛入门经典》P117思考
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
//递归实现字典序排列
void print_permutation(int n,int *A,int cur)//n为元素数量,A为用来递归调用的数组,cur为数组标号
{
int i,j;
if(cur==n)
{
for(i=0;i<n;i++) printf("%d ",A[i]);
printf("\n");
}
else for(i=1;i<=n;i++) //在数组中尝试去填入不同的数字
{
int ok=1;
for(j=0;j<cur;j++)
if(A[j]==i) ok=0;//已经出现
if(ok)
{
A[cur]=i;
print_permutation(n,A,cur+1);//递归调用
}
}
}
int main(void)
{
int i,j;
int A[MAX];
int n;
scanf("%d",&n);
print_permutation(n,A,0);
return 0;
}