#include<iostream>
using namespace std;
const int N=10;
int a[N];
bool b[N];//0表示该数没有用过,1表示该数已经用过了
int m;
void dfs(int u)
{
   if(u>m){
        for(int i=1;i<=m;i++)
    {
        cout<<a[i]<<" ";
    }
    puts("");
    return ;
    }
//依次枚举每个数,看当前位置可以填哪个数
    for(int i=1;i<=m;i++)
    {
        if(b[i]==false){
            a[u]=i;
            b[i]=true;
            dfs(u+1);
            
            a[u]=0;
            b[i]=false;
        }
    }
}
//看每个位置可以放哪些数
int main()
{
    
    cin>>m;
    dfs(1);
    return 0;
}