#include <iostream>

#define MAX 1<<12

using namespace std;

int N;
char P[MAX][13];

void Generate( int x )
{
    for( int i =  (1 << (x-1) ) ; i < (1 << x) ; ++i  )
    {

        for( int j = 0; P[ (1 << (x) ) - 1 - i ][j] ; ++j )
        {
            P[i][j] = P[ (1 << (x) ) - 1 - i ][j];
            if(  P[(1 << (x) ) - 1 - i][j+1] == NULL )
            {
                P[ (1 << (x) ) - 1 - i][j+1] = '0';
                P[i][j+1] = '1';
                break;
            }
        }
    }
}

void Conf( int i, int j )
{
    if( P[i][j] ) Conf( i, j + 1 );
    else return;
    cout << P[i][j] << ' ';
}
void OUT()
{
    for( int i = 0; i < ( 1 << N ); ++i )
    {
        Conf( i, 0 );
        cout << '\n';
    }
}

void Solve()
{
    cin >> N;
    P[0][0] = '0';
    P[1][0] = '1';

    for( int i = 2; i <= N; ++i )
        Generate(i);

    OUT();
}

int main()
{
    Solve();
    return 0;
}