/*
    题意:题目定义一种n位的yellow code  相邻两个数之间要差别至少[n/2]。让你构造出n位的yellow code
    观察发现,n位可以由n-1位复制一遍,然后最后一列再算一下得来
    对最后一列的前n个爆搜即可,后n个是前n个取反
*/

#include
<cstdio>
#include
<cstring>

int code[5000][15];

bool dfs(int level,int n)
{
    
if(level==(1<<n-1))return true;
    
int cnt=0;
    
for(int j=0;j<n-1;j++)
        
if(code[level][j]!=code[level-1][j])cnt++;
    
if(cnt>=n/2)
    
{
        code[level][n
-1]=code[level-1][n-1];
        
if(dfs(level+1,n))return true;
    }

    code[level][n
-1]=!code[level-1][n-1];
    
if(dfs(level+1,n))return true;
    
return false;
}

int main()
{
    code[
0][0]    =0;
    code[
1][0]=1;
    
for(int n=2;n<=12;n++)
    
{
        
for(int i=0;i<(1<<n-1);i++)
            
for(int j=0;j<n-1;j++)
                code[i
+(1<<n-1)][j]=code[i][j];
        dfs(
1,n);
        
for(int i=0;i<(1<<n-1);i++)
            code[i
+(1<<n-1)][n-1]=!code[i][n-1];        
    }

    
int n,t=0;
    
while(scanf("%d",&n),n)
    
{
        
if(t++)puts("");
        
for(int i=0;i<(1<<n);i++)
        
{
            
for(int j=0;j<n;j++)
                printf(
"%d",code[i][j]);
            puts(
"");
        }

    }

    
return 0;
}