#include #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; }