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