题目传送门
#include <bits/stdc++.h>
#define int long long
using namespace std;
int N,m,n;
int a[1000][1000];
int b[10000];
void smn(){
int mc=INT_MAX;
int im,in;
for(int i=1;i<=N;i++){
for(int j=i+1;j<=N;j++){
if(i*j==N){
if(j-i<mc){
mc=j-i;
im=j;
in=i;
}
}
}
}
::m=im;
::n=in;
}
void dfs(int x,int y,int k,char g){
if(x>=1&&x<=m&&y>=1&&y<=n&&a[x][y]==0){
a[x][y]=b[k];
if(g=='r'){
dfs(x,y+1,k+1,'r');
dfs(x+1,y,k+1,'d');
dfs(x,y-1,k+1,'l');
dfs(x-1,y,k+1,'u');
}
else if(g=='d'){
dfs(x+1,y,k+1,'d');
dfs(x,y+1,k+1,'r');
dfs(x,y-1,k+1,'l');
dfs(x-1,y,k+1,'u');
}
else if(g=='l'){
dfs(x,y-1,k+1,'l');
dfs(x,y+1,k+1,'r');
dfs(x+1,y,k+1,'d');
dfs(x-1,y,k+1,'u');
}
else if(g=='u'){
dfs(x-1,y,k+1,'u');
dfs(x,y+1,k+1,'r');
dfs(x+1,y,k+1,'d');
dfs(x,y-1,k+1,'l');
}
}
}
bool cmp(int a,int b){
return a>b;
}
signed main(){
cin.tie(0);
cin>>N;
smn();
for(int i=1;i<=N;i++) scanf("%lld ",&b[i]);
sort(b+1,b+1+N,cmp);
dfs(1,1,1,'r');
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
printf("%lld ",a[i][j]);
}
putchar('\n');
}
return 0;
}