#include <bits/stdc++.h>
using namespace std;
int n;
const int N=10;
int st[N];
bool used[N];
void dfs(int u){
if(u>n){
for(int i=1;i<=n;i++)
cout<<st[i]<<" ";//每个排列生成的时候,需要O(n)的时间输出,所以总共有n!个排列,每个O(n),所以这部分是O(n * n!)。
cout<<endl;
return;
}
for(int i=1;i<n+1;i++){
if(!used[i]){//筛选出没用过的
st[u]=i,used[i]=true;
dfs(u+1);
used[i]=false;st[u]=0;//恢复现场
}
}
}
int main(){
cin>>n;
dfs(1);
}