#include<stdio.h>
#include<algorithm>
using namespace std;

#define NMAX 1000005

int pattern[NMAX];
int n, prefix;

void solve(int n) {
    if(!n) {
        return ;
    }
    solve(n - 1);

    int index = (1 << (n - 1));
    if(!pattern[index])
        prefix = 1;
    else
        prefix = 0;

    //pattern[index] = pattern[index - 1] + (1 << (n - 1)) * prefix;
    for(int i = (1 << (n - 1)); i < (1 << n); i++) {
        pattern[i] = pattern[i - index] + (1 << (n - 1)) * prefix;
    }
    reverse(pattern + index, pattern + (1 << n));
}

void transf(int val) {
    for(int i = 0; i < n; i++)
        printf("%d", ((val & (1 << i)) ? 1 : 0));
    printf("\n");
}

int main () {
  //  freopen("a.in","r",stdin);
//    freopen();

    scanf("%d",&n);
    solve(n);

    for(int i = 0; i < (1 << n); i++)
        transf(pattern[i]);

    return 0;
}