#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

void yh(vector<vector<int>> &vec, int n) {
    for (int i = 0; i < n; i++)
        for (int j = 0; j < i+1; j++) {
            vec[i].resize(i+1);
            if (j == 0 || j == i) {
                vec[i][j] = 1;
            } else vec[i][j] = vec[i - 1][j - 1] + vec[i - 1][j];
        }
}

int main() {
    int n;
    cin >> n;   // cin本身是会略过所有空格,回车,tab然后开始读入,遇到空格,回车,tab停止读入,光标会停留在这这些字符之前。意思就是下一次读入也会从空格回车这些东西开始读入
    vector<vector<int>> vec(n);
    yh(vec, n);
    for (int i = 0; i < vec.size(); i++){
        for (int j = 0; j < vec[i].size(); j++) {
            cout << setw(5) << vec[i][j];
        }
        cout << endl;
    }
    return 0;

}
// 64 位输出请用 printf("%lld")