/*规矩:不重复 后面的要比前面大*/
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=20;
int p[N];
bool z[N];
void dfs(int x)
{
for(int i=1;i<=n;i++)
{
if(!x||(!z[i]&&i>p[x-1]))
{
z[i]=true;
p[x]=i;
for(int j=0;p[j];j++)
printf("%d ",p[j]);
puts("");
if(i==n&&x==0)
return;
dfs(x+1);
z[i]=false;
p[x]=0;
}
}
}
int main()
{
scanf("%d",&n);
printf(" \n");
dfs(0);
return 0;
}