#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>a;
void dfs(int x)
{
if(x==n)//倒序输出数组
{
int len=a.size();
for(int i=len-1;i>=0;i--)
cout<<a[i]<<" ";
cout<<endl;
return;
}
for(int i=n;i>=1;i--)//倒序枚举填入的数字
{
if(!x||a[x-1]>i)//如果是第一个填入的数字或者后面填入的数字满足降序的条件
{
a.push_back(i);//填入
dfs(x+1);//向下探索
a.pop_back();//恢复状态
}
}
dfs(x+1);//没有合适的填入的数字则浪费一个填入的机会
}
int main()
{
cin>>n;
dfs(0);
return 0;
}