#include<iostream>
#include<cstdio>
using namespace std;
const int N=20;
int n;
int st[N],a[N],path[N];
void dfs(int u,int k){
//递归出口
if(u>k){
for(int i=1;i<=k;i++) printf("%d ",path[i]);
printf("\n");
return ;
}
//循环体
for(int i=1;i<=n;i++){
if(!st[i]&&i>path[u-1]){
st[i]=1;
path[u]=i;
dfs(u+1,k);
st[i]=0;
}
}
}
int main(){
cin>>n;
cout<<endl; //不加AC不了
//先枚举一个数的排列,然后两个、三个……
for(int i=1;i<=n;i++) dfs(1,i);
return 0;
}