Hint on Java
import java.util.*;
import java.io.*;
public class p1656
{
public static int reverse(int k, int N)
{
return N - k - 1;
}
public static point fun(int i, int j, int N, int function)
{
point p = new point();
if (function == 1)
{
if (i != j)
{
p.i = reverse(j, N);
p.j = reverse(i, N);
} else
{
p.i = reverse(i, N);
p.j = j;
}
} else if (function == 2)
{
if (i != j)
{
p.i = j;
p.j = i;
} else
{
p.i = i;
p.j = reverse(j, N);
}
} else if (function == 3)
{
if (i != j)
{
p.i = reverse(i, N);
p.j = reverse(j, N);
} else
{
p.i = reverse(i, N);
p.j = reverse(j, N);
}
}
return p;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int arr[] = new int[N * N];
//{198, 186, 181, 190, 194, 194, 174, 188, 171, 198, 182, 171, 175, 184, 177, 200, 189, 185, 177, 171, 172, 180, 186, 188, 197};
int[] out = new int[N * N];
for (int i = 0; i < N * N; i++)
{
arr[i] = in.nextInt();
}
Arrays.sort(arr);
/*for (int i = 0; i < N * N; i++)
System.out.print(arr[i] + " ");
System.out.println()*/;
int po = 0;
for (int j = 0; j < N / 2 ; j++)
{
for (int i = j; i < N / 2 + 1; i++)
{
// System.out.println("i = " + i + " j = " + j + " po = " + po);
out[N * i + j] = arr[po++];
point p = fun(i, j, N, 1);
//System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
p = fun(i, j, N, 2);
//System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
p = fun(i, j, N, 3);
//System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
if (i != j && i != N / 2 )
{
int savei = i;
i = reverse(i, N);
// System.out.println("i = " + i + " j = " + j + " po = " + po);
out[N * i + j] = arr[po++];
p = fun(i, j, N, 1);
//System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
p = fun(i, j, N, 2);
// System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
p = fun(i, j, N, 3);
// System.out.println("i = " + p.i + " j = " + p.j + " po = " + po);
out[N * p.i + p.j] = arr[po++];
i = savei;
}
}
}
out[N / 2 * N + N / 2] = arr[po++];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
System.out.format("%4d", out[i * N + j]);
System.out.println();
}
}
}
class point
{
int i, j;
}