#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[20],stdd;
bool vis[20],flag ;
int ans[10][10];
void dfs(int x,int y){
if(flag) return ;
if(y>n){
x++;
y=1;
}
if(x>n){
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cnt+=ans[i][j];
}
if(cnt!=stdd) return ;
cnt=0;
}
cnt=0;
for(int j=1;j<=n;j++){
for(int i=1;i<=n;i++){
cnt+=ans[i][j];
}
if(cnt!=stdd) return ;
cnt=0;
}
cnt=0;
for(int i=1;i<=n;i++) cnt+=ans[i][i];
if(cnt!=stdd) return ;
cnt=0;
for(int i=1;i<=n;i++) cnt+=ans[i][n-i+1];
if(cnt!=stdd) return ;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) cout<<ans[i][j]<<' ';
cout<<'\n';
}
flag=1;
return ;
}
for(int i=1;i<=n*n;i++){
if(!vis[i]){
vis[i]=1;
ans[x][y]=a[i];
dfs(x,y+1);
vis[i]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n*n;i++){
cin>>a[i];
stdd+=a[i];
}
stdd/=n;
cout<<stdd<<'\n';
sort(a+1,a+(n*n)+1);
dfs(1,1);
}
当判断x>n时该如何快速判断是否满足行列斜边相等呢?