#include <bits/stdc++.h>
using namespace std;
int n,a[10][10];
//k表示赋值第k个斜边,t表示要赋值的起始值
//x y表示要赋值的起始位置
void fun(int k,int t,int x,int y){
//递归出口
if(x <= n && y <= n){
//第奇数斜边,向右上
if(k % 2 == 1){
//如果在矩阵中
while(x >= 1 && y <= n){
a[x][y] = t;
x--;
y++;
t++;
}
x++;y--;
}else{
//向左下
while(x <= n && y >= 1){
a[x][y] = t;
x++;
y--;
t++;
}
x--;y++;
}
//k<n奇数向右,偶数向下
if(k<n){
if(k % 2 == 1){
fun(k+1,t,x,y+1);
}else{
fun(k+1,t,x+1,y);
}
}else{
//否则偶数向右,奇数向下
if(k % 2 == 0){
fun(k+1,t,x,y+1);
}else{
fun(k+1,t,x+1,y);
}
}
}
}
int main(){
int i,j;
cin>>n;
fun(1,1,1,1);
for(i = 1;i <= n;i++){
for(j = 1;j <= n;j++){
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
return 0;
}
/**************************************************************
Problem: 1382
User: admin
Language: C++
Result: Accepted
Time:8 ms
Memory:2072 kb
****************************************************************/