import java.util.Scanner;
// 查看备注即可
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum = 0;
int[][] a = new int[n][n];
int count = 1; // 数组的值
int x = 0;
int y = 0;
a[0][0] = 1;
// for (int k = 0; k < 3; k++) {
while (count < n * n) {
if (y < n - 1) {
y++;
// 向右赋值 x不变 y变
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("向右赋值:" + count + ":" + x + "," + y);
} else {
// 向下赋值
x++;
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("向下赋值:" + count + ":" + x + "," + y);
}
// 向左下角赋值
if (x < n - 1 && y > 0) {
int numy = y;
int numx = x;
for (int i = 0; i < Math.abs(numx - numy); i++) {
x++;
y--;
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("向左下角赋值:" + count + ":" + x + "," + y);
}
}
if (x < n - 1) {
// 向下赋值
x++;
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("向下赋值:" + count + ":" + x + "," + y);
} else {
y++;
// 向右赋值 x不变 y变
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("向右赋值:" + count + ":" + x + "," + y);
}
// 右上角赋值
if (x > 0 && y < n - 1) {
int numy = y;
int numx = x;
for (int i = 0; i < Math.abs(numx - numy); i++) {
x--;
y++;
if (a[x][y] == 0) {
a[x][y] = ++count;
}
// System.out.println("右上角赋值:" + count + ":" + x + "," + y);
}
}
}
// 打印出数组
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
}