//其实就是个排版题,注意好跳出循环的条件就好
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int seq[10000]={0};
int matrix[10000][100]={0};
void matrix_size(const int &N,int &m,int &n){
m=(int)sqrt(N);
while(N%m)++m;
n=N/m;
if(m<n)swap(m,n);
}
bool cmp(const int &a,const int &b){
return a>b;
}
int main(void){
// freopen("in.log","r",stdin);
int N,m,n;
scanf("%d",&N);
for(int i=0;i<N;++i)scanf("%d",&seq[i]);
sort(seq,seq+N,cmp);
matrix_size(N,m,n);
int up=0,down=m,left=0,right=n,index=0;;
while(index<N){
for(int i=left;i<right&&index<N;++i,++index)
matrix[up][i]=seq[index];
++up;
for(int i=up;i<down&&index<N;++i,++index)
matrix[i][right-1]=seq[index];
--right;
for(int i=right-1;i>=left&&index<N;--i,++index)
matrix[down-1][i]=seq[index];
--down;
for(int i=down-1;i>=up&&index<N;--i,++index)
matrix[i][left]=seq[index];
++left;
}
for(int j=0;j<m;++j){
for(int i=0;i<n;++i){
if(i)printf(" ");
printf("%d",matrix[j][i]);
}
printf("\n");
}
}