#include <iostream>

using namespace std;

void citire (int &n, int s[])
{
    cin>>n;
    for (int i=0;i<n*n;i++)
        cin>>s[i];
}
void ordonare (int n, int s[])
{
    int ordonat=0,aux,i;
    while (ordonat==0)
    {
        ordonat=1;
        for (i=0;i<n*n-1;i++)
            if (s[i]<s[i+1])
            {
                aux=s[i];
                s[i]=s[i+1];
                s[i+1]=aux;
                ordonat=0;
            }
    }
}
void constr (int n, int s[], int a[100][100])
{
    int i,j,nivel=0;
    for (i=0;i<n;i++)
    {
        a[i][i]=s[nivel];
        nivel++;
    }
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            if (i!=j)
            {
                a[i][j]=s[nivel];
                nivel++;
            }
}
void afis (int a[100][100],int n)
{
    int i,j;
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
}
int main()
{
    int n,x[100000],a[100][100];
    citire(n,x);
    ordonare(n,x);
   constr(n,x,a);
   afis(a,n);
    return 0;
}