#include <iostream>
#include <algorithm>
using namespace std;
bool mrk[20];
int sto[20],suml[6],sumr[6],sum=0,ans[6][6];
int sumx1;int sumx2;
int n,cnt,j,N;
void judge()
{
for(int i=1;i<=n;i++)if(suml[i]!=sum)return;
for(int i=1;i<=n;i++)if(sumr[i]!=sum)return;
if(sumx1!=sum || sumx2!=sum)return;
j=1;
}
void prt()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j!=n)cout << ans[i][j] << ' ';
else cout << ans[i][j]<< endl;
}
}
cout << endl;
}
void dfs(int x, int y)
{
int dx, dy,s;
if(x==n && y==n){judge();}
if(y==n && suml[x]!=sum)return ;
if(y==n)dx=x+1,dy=1;
else dx=x,dy=y+1;
int i;
for(i=1;i<=N;i++)
{
if(!mrk[i])
{
s=sto[i];
suml[dx]+=s;
sumr[dy]+=s;
if(dx+dy-1==n)sumx1+=s;
if(dx-dy+n==n)sumx2+=s;
if(sum!=0 && (suml[dx]>sum || sumr[dy]>sum || sumx1>sum || sumx2>sum))
{
suml[dx]-=s;
sumr[dy]-=s;
if(dx+dy-1==n)sumx1-=s;
if(dx-dy+n==n)sumx2-=s;
if(i==N)return;
continue;
}
mrk[i]=1;
ans[dx][dy]=s;
dfs(dx,dy);
if(j)return;
ans[dx][dy]=0;
mrk[i]=0;
suml[dx]-=s;
sumr[dy]-=s;
if(dx+dy-1==n)sumx1-=s;
if(dx-dy+n==n)sumx2-=s;
}
}
}
int main()
{
cin >> n;
N =n*n;
for(int i=1;i<=N;i++)
{
cin >> sto[i];
sum+=sto[i];
}
sum=sum/n;
sort(sto+1,sto+1+N);
dfs(1, 0);
cout << sum << endl;
prt();
return 0;
}