//解题思路:
//1.第一行其实是前n项等差数列的和
//2.注意观察下面行的元素,和上面行其实有关系v[i][j]=v[i-1][j+1]-1
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        vector<vector<int>> v(n,vector<int>(n,0));//用vector创建一个二维数组
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n-i;j++)
            {
                if(i==0)
                {
                    v[i][j]=j+1+j*(j+1)/2;//等差数列求和,注意j是从0开始的,所以j需要加1
                }
                else
                {
                    v[i][j]=v[i-1][j+1]-1;//注意观察,下面一行数据核上面一行数据的关系
                }
                if(v[i][j]) //打印
                {
                    cout<<v[i][j]<<' ';
                }
            }
            cout<<endl;
        }
    }
}