#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
int N;
bool compare(const int &a, const int &b)
{
return a > b;
}
void solve()
{
int A[N];
for(int i = 0; i < N; i ++){
cin >> A[i];
}
sort(A, A + N, compare);
//以sqrt(n)向下寻找最大的n
int m, n = sqrt(N);
while(N % n != 0){
n --;
}
m = N / n;
int T[m][n];
bool vis[m][n]; //vis[i][j] = true表示(i,j)已经访问过
int dx[] = {0, 1, 0, -1};
// T【x】【y】
//x轴(行) 水平方向移动 坐标对应的操作 0 +1 0 -1
int dy[] = {1, 0, -1, 0}, di = 0;
//y轴 (列) 垂直方向移动 坐标对应的操作 +1 0 -1 0
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++){
vis[i][j] = false;
}
int i = 0, j = 0, k = 0;
do{
T[i][j] = A[k ++];
vis[i][j] = true;
int ni = i + dx[di], nj = j + dy[di];
//( ni , nj )下次的坐标
if(ni < 0 || ni >= m || nj < 0 || nj >= n || vis[ni][nj])
//
//下次运行会碰壁 或者是已经访问过的 就进行下一个方向di(0-3)对应 dx【】 dy【】 的下标
{
di = (di + 1) % 4;
}
i += dx[di];
j += dy[di];
}while(k < N);/ N个数据已经填充完
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j ++){
cout << T[i][j];
if(j + 1 < n)
cout << " ";
}
cout << endl;
}
}
int main()
{
cin >> N;
solve();
return 0;
}
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
int N;
bool compare(const int &a, const int &b)
{
return a > b;
}
void solve()
{
int A[N];
for(int i = 0; i < N; i ++){
cin >> A[i];
}
sort(A, A + N, compare);
//以sqrt(n)向下寻找最大的n
int m, n = sqrt(N);
while(N % n != 0){
n --;
}
m = N / n;
int T[m][n];
bool vis[m][n]; //vis[i][j] = true表示(i,j)已经访问过
int dx[] = {0, 1, 0, -1};
// T【x】【y】
//x轴(行) 水平方向移动 坐标对应的操作 0 +1 0 -1
int dy[] = {1, 0, -1, 0}, di = 0;
//y轴 (列) 垂直方向移动 坐标对应的操作 +1 0 -1 0
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++){
vis[i][j] = false;
}
int i = 0, j = 0, k = 0;
do{
T[i][j] = A[k ++];
vis[i][j] = true;
int ni = i + dx[di], nj = j + dy[di];
//( ni , nj )下次的坐标
if(ni < 0 || ni >= m || nj < 0 || nj >= n || vis[ni][nj])
//
//下次运行会碰壁 或者是已经访问过的 就进行下一个方向di(0-3)对应 dx【】 dy【】 的下标
{
di = (di + 1) % 4;
}
i += dx[di];
j += dy[di];
}while(k < N);/ N个数据已经填充完
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j ++){
cout << T[i][j];
if(j + 1 < n)
cout << " ";
}
cout << endl;
}
}
int main()
{
cin >> N;
solve();
return 0;
}