#include <bits/stdc++.h> using namespace std;

//花了我超多时间的一道题,全程一个一个调试完的

int main() { int n,number=1; cin >> n; int a[n+2][n+2]; int x=1,y=1; int ope=n-1; a[1][1]=number++; int flag = 1; while(ope>0){ //上三角 int cha = n-ope; if(flag==1){ //根据flag来判断是向左下还是右上 a[x][++y] = number++; while(cha){ a[++x][--y] = number++; cha--; } flag = 0; ope--; continue; } else if(flag==0){ a[++x][y] = number++; while(cha){ a[--x][++y] = number++; cha--; } flag = 1; ope--; continue; } } while(ope<=n-1){ //下三角 int cha = n+ope; // if(flag==0){ a[x][++y] = number++; while(cha<=(2n-3)){ //为什么是2n-3是数学问题 a[--x][++y] = number++; cha++; } flag = 1; ope++; continue; } if(flag==1){ a[++x][y] = number++; while(cha<=(2*n-3)){ a[++x][--y] = number++; cha++; } flag = 0; ope++; continue; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout << a[i][j] << " "; } cout << endl; } }