#include<stdio.h>
int main() {
    int i, j, n, k = 1;
    int a[100][100] = {0};
    scanf("%d", &n);
    //输出上三角
    for (i = 0; i < n; i++) { //行
        for (j = 0; j <= i; j++) { //列
            if (i % 2 == 0) //偶数行
                a[i - j][j] =
                    k; // a[0][0]=1;然后执行k++=2,a[2][0]=4,a[1][1]=5,i在不断减小,j在不断变大
            else
                a[j][i - j] = k; // a[0][1]=2,k++=3,a[1][0]=3,反过来
            k++;   //k从第一次运行的时候就不断+1
        }
    }
    //下三角
    for (i = n; i < 2 * n - 1; i++) {
        for (j = 1; j < 2 * n - i; j++) {
            if (i % 2 == 0)
                a[n - j][j + i - n] = k;
            else
                a[j + i - n][n - j] = k;
            k++;
        }
    }
    for (i = 0; i < n; i++) {  //打印
        for (j = 0; j < n; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}