#include <stdio.h>

int main() {
    int a[1000][1000], n, i, j, b = 1, k;
    scanf("%d", &n);  // 输入矩阵的大小

    // 填充矩阵
    for (i = 0; i < 2 * n - 1; i++) {  // 遍历每条对角线
        j = i < n ? 0 : i - n + 1;  // 起始行
        k = i < n ? i : n - 1;      // 起始列

        // 根据 i 的奇偶性决定填充方向
        while (j < n && k >= 0) {
            if (i % 2 == 0) {
                a[k][j] = b++;  // 按从下到上填充
            } else {
                a[j][k] = b++;  // 按从上到下填充
            }
            j++;
            k--;
        }
    }

    // 输出矩阵
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}