import java.util.ArrayList;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<int[]> rowList = new ArrayList<>();
// 行数
for (int i = 1, k = n; i <= n; i++, k--) {
int[] numArr = new int[k];
// 所在行数 + 1 = 每行首次需要加的值
int x = i + 1;
// 该行的数字
for (int g = 1; g <= numArr.length; g++) {
// 第一行第一个数
if (i == 1 && g == 1) {
// 索引每次从0开始,所以都需要减1
numArr[g - 1] = 1;
continue;
}
// 除了第一行以外的每一行的第一个数
if (g == 1) {
// 每一行的第一个数 = 上一行的第一个数 + (所在行数 - 1)
numArr[0] = rowList.get(i - 1 - 1)[0] + (i - 1);
continue;
}
// 其他行非第一个的数 = 上一个数 + 差值(每次多一)
numArr[g - 1] = numArr[g - 1 - 1] + x;
x = x + 1;
}
rowList.add(numArr);
}
// 打印
for (int m = 0; m < rowList.size(); m++) {
int[] ints = rowList.get(m);
StringBuilder stringBuilder = new StringBuilder();
for (int j = 0; j < ints.length; j++) {
stringBuilder.append(ints[j] + " ");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
System.out.print(stringBuilder);
// 打印完行后换行
System.out.println();
}
}
}