/*
    題意:題目定義一種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;
}