const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
function generateMatrix(n) {
let matrix = new Array(n);
for (let i = 0; i < n; i++) {
matrix[i] = new Array(n);
matrix[i][0] = 1 + (i * (i + 1)) / 2; // 计算每一行第一个元素
}
for (let j = 1; j < n; j++) {
for (let i = 0; i < n - j; i++) {
matrix[i][j] = matrix[i + 1][j - 1] + 1; // 根据依赖关系填充上三角部分
}
}
for (let i = 0; i < n; i++) {
let row = [];
for (let j = 0; j < n - i; j++) {
row.push(matrix[i][j]);
}
console.log(row.join(" ")); // 按行输出上三角部分
}
}
let input = await readline();
generateMatrix(input);
})();