#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
#include <algorithm>

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
using namespace std;

const int INF = 0x3f3f3f3f;
const double EPS = 0.000000001;
const double PI = 3.141592653589793;
const long long LLINF = 99999999999999999LL;
const int MAX_N = 100005;
const int MOD = 1000000007;
const long long MAX_VAL = 200000000;

int N;
int v[MAX_N], A[1002][1002];

int main()
{
    /*
    #ifndef ONLINE_JUDGE
        freopen("data.in", "r", stdin);
    #endif
    */

    cin >> N;
    for(int i = 1; i <= N * N; ++i)
        cin >> v[i];

    sort(v + 1, v + N * N + 1);

    for(int i = 1, k = N * N; i <= N; ++i, --k)
        A[i][i] = v[k];
    int k = N * N - N;
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            if(i != j) {
                A[i][j] = v[k];
                --k;
            }

    for(int i = 1; i <= N; ++i) {
        for(int j = 1; j <= N; ++j)
            cout << A[i][j] << " ";
        cout << "\n";
    }

    return 0;
}