#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n,k = 0,ans = 0,num[N][N],path[N],before = 0;
void dfs(int u)
{
if(u == n && ans == n)
{
for(int i = 0;i <= n;i ++ )
{
if(path[i])
printf("%d ",path[i]);
}
puts("");
}
for(int i = 0;i <= n;i ++ )
{
if(ans < n && ans >= 0 && before <= num[u][i])
{
int x = before;
before = num[u][i];
ans += num[u][i];
path[k ++] = num[u][i];
dfs(u + 1);
before = x;
ans -= num[u][i];
path[k] = 0;
}
}
}
int main()
{
scanf("%d",&n);
for(int i = 0;i < n;i ++ )
{
for(int j = 0;j <= n;j ++ )
{
num[i][j] = j;
}
}
dfs(0);
return 0;
}