import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int size = scan.nextInt();
for(int i=0;i<size;i++){
solution(i,size);
}
}
}
public static void solution(int n,int size){
//输出每一行的方法/
int first = getTheFirst(n);//第一个数
int len = getLineLength(n,size);//得到了应该输出的长度
int dif = getDif(n);
for(int i=0;i<len;i++){
//开始输出
System.out.print(first+" ");
first +=(dif++);
}
System.out.println();//每次输出一梭子就换行
}
public static int getLineLength(int lineNumber,int size){
return size - lineNumber;//得到了每一行有多少个数
}
public static int getTheFirst(int lineNumber){
int res = 1;
if(lineNumber==0) return res;
for(int i=0;i<=lineNumber;i++){
res+=i;
}
return res;//得到了每一行的第一位数字 从0开始数的行数
}
public static int getDif(int n){
//得知每一行的第一个元素跨步多少
return n+2;
}
}