
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int *find_max(int *p, int n)
{
int *pMax = p;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int v = *(p + i * n + j);
if (v > *pMax)
pMax = p + i * n + j;
}
}
return pMax;
}
int *find_min_k(int *p, int n, int k)
{
int min[4] = {INT_MAX, INT_MAX, INT_MAX, INT_MAX};
int *pMin[4] = {};
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int v = *(p + i * n + j);
for (int m = 0; m < 4; m++)
{
if (v < min[m])
{
for (int s = 3; s > m; s--)
{
min[s] = min[s - 1];
pMin[s] = pMin[s - 1];
}
min[m] = v;
pMin[m] = p + i * n + j;
break;
}
}
}
}
return pMin[k];
}
void change(int *p, int n)
{
swap(find_max(p, n), p + n / 2 * n + n / 2);
swap(find_min_k(p, n, 0), p);
swap(find_min_k(p, n, 1), p + n - 1);
swap(find_min_k(p, n, 2), p + (n - 1) * n);
swap(find_min_k(p, n, 3), p + (n - 1) * n + n - 1);
}
int main()
{
int **a, *p, i, j;
int n;
scanf("%d", &n);
p = (int *)malloc(n * n * sizeof(int));
a = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++)
a[i] = p + n * i;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf("%d", &a[i][j]);
change(p, n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
free(p);
free(a);
return 0;
}