n = int(input())

lists = []

for i in range(n):  # 先初始化一个二维列表,当作容器
    ls = []
    for j in range(n):
        ls.append(0)
    lists.append(ls)

counter = 1  # 记录每一步的值

i, j = 0, 0  # 从0,0开始

while True:
    
    # print(i,j)
    lists[i][j] = counter  # 给每一步附上值
    counter += 1

    # 默认斜向上移动
    i -= 1
    j += 1

    if i == -1 and j == n:   # 在草稿纸上手写几个蛇形矩阵会发现,-1,n是结束位置
        break                # 所以当默认斜向上移动后,到达这个位置就退出循环

    if i == -1:  # 同样会发现规律,当按照默认斜向上走一步后,到达的是i等于-1的位置,意味着需要换行,并且下一行的i,就是当前的j
        i = j
        j = 0


for i in range(n):     # 按着蛇形走完后,则输出
    for j in range(n):
        if lists[i][j] != 0:
            print(lists[i][j], end=' ')
    print()