import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 定义二维数组。
int[][] array = new int[n][];
for (int i = 0; i < n; i++) {
// 为最高维分配引用空间。
array[i] = new int[i + 1];
// 每行的端点数为1,一个数也为1。
array[i][0] = array[i][array[i].length - 1] = 1; if (i > 1) {
for (int j = 1; j < i; j++) {
// 每个数等于它左上方和上方两数之和。
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
// 输出:打印数组内容
System.out.print(printArr(array, n));
}
/**
* @param arr
* @param row
* @return
*/
public static String printArr(int[][] arr, int row) {
// 字符串容器
StringBuilder sb = new StringBuilder();
for (int i = 0; i < row; i++) {
for (int j = 0; j <= i; j++) {
// 字符串拼接,域宽为5。
sb.append(String.format("%5d", arr[i][j]));
}
// 换行
sb.append("\n");
}
// 转字符串类型
return sb.toString();
}
}