#include<bits/stdc++.h>
using namespace std;
long long n,bn[5005],zs,flag,s1[5005],m;
bool s2[5005];
void dfs(int nzs,bool op[5005],int bj,long long sl[5005])
{
if(flag)return;
if(bj-1==n)
{
int dzs=0;
for(int i=1;i<=m;i++)
{
dzs=0;
for(int j=1;j<=m;j++)
dzs+=sl[(j-1)*m+i];
if(dzs!=zs)return;
}
dzs=0;
for(int i=1;i<=m;i++)
dzs+=sl[(i-1)*m+i];
if(dzs!=zs)return;
dzs=0;
for(int i=1;i<=m;i++)
dzs+=sl[(i-1)*m+(m-i+1)];
if(dzs!=zs)return;
flag=1;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
cout<<sl[(i-1)*m+j]<<" ";
cout<<endl;
}
exit(0);
}
if(nzs%zs!=0&&(bj-1)%m==0)return;
for(int i=1;i<=n;i++)
if(!op[i])
{
op[i]=true;
sl[bj]=bn[i];
dfs(nzs+sl[bj],op,bj+1,sl);
op[i]=false;
sl[bj]=0;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n*n;i++)
{
cin>>bn[i];
zs+=bn[i];
}
zs/=n;
m=n;
cout<<zs<<endl;
if(n==0)return 0;
if(n==1){
cout<<zs;
return 0;
}
n*=n;
sort(bn+1,bn+n+1);
dfs(0,s2,1,s1);
return 0;
}
提交记录