#include <stdio.h>

int main() {
    unsigned int N = 0;
    unsigned int result[100][100] = {};
    unsigned int i,row,column;

    scanf("%u", &N);
    // 生成二维蛇形数组
    for (row=0; row<N; ++row) {
        for (column=0; column<N-row; ++column) {
            if (column==0) {     // 第一列先算出来
                if (row==0) {    // result[0][0]肯定为1
                    result[row][column] = 1;
                } else {         // 其他的行首值 = 上一行的行首值 + 当前行号
                    result[row][column] = result[row-1][column] + row;
                }
            } else {             // 其他的行列值 = 当前行上一列的值 + 当前行号 + 当前列号 + 1
                result[row][column] = result[row][column-1] + row + column + 1;
            }
        }
    }

    // 按格式打印
    for (row=0; row<N; ++row) {
        for (column=0; column<N-row; ++column) {
            printf("%u", result[row][column]);
            if (column != N-row-1) {
                printf(" ");
            } else {}
        }
        printf("\n");
    }

    return 0;
}