/*思路:排序后,用四个while填充
填充顺序a b c d e f:
aaa
deb
dfb
ccb
*/
//PAT-1-1050
#include <iostream>
#include <algorithm>
#include <string>
#include <math.h>
using namespace std;
bool compare(int a,int b)
{
return a>b;
}
int main(){
int n;
cin>>n;
int num[n];
for (int i=0; i<n; i++) {
scanf("%d",&num[i]);
}
int row=n,col=1;
for (int i=n;i>=sqrt(n) ; i--) {
int j=n/i;
if (i*j==n&&i-j<row-col) {
row=i;
col=j;
}
}
sort(num, num+n, compare);
int result[row][col];
//初始化
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) {
result[i][j]=0;
}
}
int count=0;
int cur_r=-1,cur_c=-1;//初始化为-1 保证while循环的一致性
/*
aaa
deb
dfb
ccb
*/
while (count<row*col) {
cur_r++;
cur_c++;
while (cur_c<col&&result[cur_r][cur_c]==0) {
result[cur_r][cur_c++]=num[count++];
}
cur_c--;
cur_r++;
while (cur_r<row&&result[cur_r][cur_c]==0) {
result[cur_r++][cur_c]=num[count++];
}
cur_r--;
cur_c--;
while (cur_c>=0&&result[cur_r][cur_c]==0) {
result[cur_r][cur_c--]=num[count++];
}
cur_c++;
cur_r--;
while (cur_r>=0&&result[cur_r][cur_c]==0) {
result[cur_r--][cur_c]=num[count++];
}
}
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) {
if(j!=col-1) cout<<result[i][j]<<" ";
else cout<<result[i][j];
}
cout<<endl;
}
return 0;
}