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();
    }
}