n = int(input()) # map函数用法 arr = [ ['']*n for _ in range(n)] i = 0 # 行索引 j = 0 # 列索引 count = 1 # 元素值 arr[i][j] = count # 按蛇形路线确定循环一个周期的的开始 while True: # 矩阵最上方只能 右移或下移 if j+1 < n: # 右移 j += 1 count += 1 arr[i][j] = count else : if i+1 < n: # 下移 i += 1 count += 1 arr[i][j] = count while True: if i+1 < n and 0 <= j-1 : # 左下 i += 1 j -= 1 count += 1 arr[i][j] = count elif i+1 < n : # 全部左下后,能下移一格,则执行 i += 1 count += 1 arr[i][j] = count #下移一格后,右上,全部右上后,抵达周期的开始,break结束最近的 while for _ in range(i): if 0 <= i-1 and j+1 < n: # 右上 i -= 1 j += 1 count += 1 arr[i][j] = count break elif j+1 < n: # 全部左下后,不能下移一格,则判断能否向右一格 j += 1 count += 1 arr[i][j] = count # 右上,全部右上后,抵达周期的开始,break结束最近的 while for _ in range(i): if 0 <= i-1 and j+1 < n: # 右上 i -= 1 j += 1 count += 1 arr[i][j] = count break if i==j and i+1==n: break for i in arr: print(*i)