#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<cstring>
#include<math.h>
#define vecType int
#define inchide exit(-1);
#ifdef home
bla bla bla
#endif // home
#undef home
#ifdef home
bla
#endif // home

using namespace std ;

inline int MAX(int a , int b ) { return ( ( a > b ) ?  a : b ) ; }
const int vecSize  = 100 ;

int numcompare( const void * A , const void * B  )
{
    return  ( *(int*)B - *(int*)A  ) ;

}

int main()
{
    //freopen("input.in" , "r" , stdin ) ;
    int n ;
    int v [100 * 100] ;
    int  i ,j ;
    cin >> n ;
   // int * m = (int*)calloc(n , sizeof(int)) ;

    for ( i = 0 ; sqrt(i) < n ; i++  ) cin >> v [ i ] ;

    qsort(v , n * n , sizeof(int) , numcompare ) ;

    for ( i = 0 ; sqrt(i) < n ; i++  ) cout << v [ i ] << '\t' ;

   // cout << endl << endl ;
    int x = n ;

    for ( int i = 0 ; i < n ; i ++ )
    {
        for ( int j = 0 ; j < n ; j ++ )
        {
            if ( i == j ) cout << v [ i ] << ' ' ;

            else  cout << v [ x ++  ] << ' ' ;

        }
        cout << '\n' ;

    }

    return  0 ;
}