#include<stdio.h>
int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
int m[11];
int v[17]={0};
void check()
{ //行
i1=16+ m[1]+ m[2]+ 13;
i2=m[3]+m[4]+ 11+ m[5];
i3=9+ m[6]+ m[7]+ m[8];
i4=m[9]+15+ m[10]+ 1;
//列
i5=16+m[3]+9+m[9];
i6=m[1]+m[4]+m[6]+15;
i7=m[2]+11+m[7]+m[10];
i8=13+m[5]+m[8]+1;
//对角
i9=16+m[4]+m[7]+1;
i10=13+11+m[6]+m[9];
if(i1==i2&&i1==i3&&i1==i4&&i1==i5&&i1==i6&&i1==i7&&i1==i8&&i1==i9&&i1==i10)
{
for(int j=1;j<=10;j++)
{
printf("%d ",m[j]);
}
}
}
void out()
{
for(int i=1;i<=10;i++)
{
printf("%d ",m[i]);
}
printf("\n");
}
void dfs(int n)
{
if(n==11)
{
check();
//out();
return;
}
for(int i=1;i<=16;i++)
{
if(v[i]==0)
{
v[i]=1;
m[n]=i;
dfs(n+1);
v[i]=0;
}
}
}
main()
{
dfs(1);
return 0;
}
int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
int m[11];
int v[17]={0};
void check()
{ //行
i1=16+ m[1]+ m[2]+ 13;
i2=m[3]+m[4]+ 11+ m[5];
i3=9+ m[6]+ m[7]+ m[8];
i4=m[9]+15+ m[10]+ 1;
//列
i5=16+m[3]+9+m[9];
i6=m[1]+m[4]+m[6]+15;
i7=m[2]+11+m[7]+m[10];
i8=13+m[5]+m[8]+1;
//对角
i9=16+m[4]+m[7]+1;
i10=13+11+m[6]+m[9];
if(i1==i2&&i1==i3&&i1==i4&&i1==i5&&i1==i6&&i1==i7&&i1==i8&&i1==i9&&i1==i10)
{
for(int j=1;j<=10;j++)
{
printf("%d ",m[j]);
}
}
}
void out()
{
for(int i=1;i<=10;i++)
{
printf("%d ",m[i]);
}
printf("\n");
}
void dfs(int n)
{
if(n==11)
{
check();
//out();
return;
}
for(int i=1;i<=16;i++)
{
if(v[i]==0)
{
v[i]=1;
m[n]=i;
dfs(n+1);
v[i]=0;
}
}
}
main()
{
dfs(1);
return 0;
}