#include<bits/stdc++.h>
using namespace std;
int square[10][10],n;
int number[100];
int sum_one;
bool used[100];
bool judge(){
int now_sum=0;
for(int i=1;i<=n;i++){
now_sum=0;
for(int j=1;j<=n;j++){
now_sum+=square[i][j];
}
if(now_sum!=sum_one){
return 0;
}
}
now_sum=0;
for(int i=1;i<=n;i++){
now_sum=0;
for(int j=1;j<=n;j++){
now_sum+=square[j][i];
}
if(now_sum!=sum_one){
return 0;
}
}
now_sum=0;
for(int i=1;i<=n;i++){
now_sum+=square[i][i];
}
if(now_sum!=sum_one){
return 0;
}
now_sum=0;
for(int i=1;i<=n;i++){
now_sum+=square[i][n-i+1];
}
if(now_sum!=sum_one){
return 0;
}
return 1;
}
void dfs(int x,int y){
if(y==1&&x>1){
int pre_s=0;
for(int i=1;i<=n;i++){
pre_s+=square[x-1][i];
}
if(pre_s!=sum_one){
return ;
}
}
if(x==n+1){
if(judge()){
cout<<sum_one<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<square[i][j]<<" ";
cout<<endl;
}
exit(0);
}
else return ;
}
for(int i=1;i<=n*n;i++){
if(!used[i]){
used[i]=1;
square[x][y]=number[i];
if(y==n){
dfs(x+1,1);
}
else dfs(x,y+1);
used[i]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n*n;i++){
cin>>number[i];
sum_one+=number[i];
}
sum_one/=n;
sort(number+1,number+1+n);
dfs(1,1);
}