#include <iostream>
#include <cstdio>
#define NMax 20
#define NrMaxS (1<<NMax)
using namespace std;
int n; int C[NrMaxS][NMax];
void AFISARE();
void GenerareCod(int);
void GenerareCod(int x)
{
if(x==1) C[1][0]=1;
else
{
GenerareCod(x-1);
for(int i=(1<<(x-1))-1; i>=0; i--)
{
//oglindim C(x-1) si completam cu 1 coloana x-1
for(int j=0; j<x-1; j++)
C[(1<<x)-i-1][j]= C[i][j];
C[(1<<x)-i-1][x-1]=1;
}
}
}
void AFISARE()
{
for(int i=1; i< 1<<n; i++) // 1 << n == 2 la puterea n
{
for(int j=0; j<n; j++) if(C[i][j]==1) printf("%d ",j+1);
printf("\n");
}
}
int main()
{
freopen("submultimi.in", "r", stdin);
freopen("submultimi.out", "w", stdout);
scanf("%d",&n);
GenerareCod(n);
AFISARE();
return 0;
}