#include<stdio.h>
#define N 4

static int a[6]={10,10,10,10,10,10};

void Print(int a[])
{
    for(int i=1; i<=4; i++)
    {
        for(int j=1; j<=4; j++)
        {
            if(j!=a[i])
                printf("0");
            else
                printf("1");
        }
        printf("\n");
    }
    printf("\n");
}

bool Standard(int i)//把第i行和前i-1行进行合法性比较检查,j代表第j几列
{
    int k=i-1;
    int l=10;
    for(;k>0;k--)
    {
        if(a[k]==a[i])
            return false;
    }
    for(k=i-1;k>0; k--)
    {
        l=i-k;
        if((a[k]+l)==a[i]||(a[k]-l)==a[i])
            return false;
    }
    return true;
}
void Trial(int i,int n)
{
    if(i>n)Print(a);
    else
        for(int j=1;j<=n; ++j)
        {
            a[i]=j;
            if(Standard(i))Trial(i+1,n);
            a[i]=10;
        }
}
void main()
{
    int i=1,n=4;
    Trial(i,n);
}