/*#include <stdio.h>
#include <string.h>
int main()
{
int i, j, l, d, x, y, w, h, n, arr[101][101] = {};
scanf("%d %d", &h, &w);
scanf("%d", &n);
for(i = 0; i < n; i++) //n개 정보 입력받기
{
scanf("%d %d %d %d", &l, &d, &x, &y);
if(d == 1)
{
for(j = x; j < x+l; j++)
{
arr[j][y] = 1;
}
}
else if(d == 0)
{
for(j = y; j < y+l; j++)
{
arr[x][j] = 1;
}
}
}
for(i = 1; i <= h; i++) //격자판 출력
{
for(j = 1; j <= w; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}*/
//#include <stdio.h>
//int main()
//{
// int i, n, j, arr[50][50] = {};
// int k=1;
// scanf("%d", &n);
//
// i=n;
// j=1;
// while(1)
// {
// arr[i][j]=k++;
//
// i--;
// j++;
//
//
// if(i==1) break;
// }
//
//
// for(i = 1; i <= n; i++)
// {
// for(j = 1; j <= n; j++)
// {
// printf("%d ",arr[i][j]);
// }
// printf("\n");
// }
// return 0;
//}
/*
#include <stdio.h>
int main()
{
int i, n, a = 1, j, arr[50][50] = {};
scanf("%d", &n);
i=1;
j=(n+1)/2;
// 1. 마방진 채우기
while(a <= n * n)
{
arr[i][j] = a;
if(a % n == 0) {
i++;
a++;
continue;
}
else
{
if(i-1<1) i=n;
else i--;
if(j+1>n) j = 1;
else j++;
a++;
}
}
// 2. 마방진 출력하기
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}*/
#include <stdio.h>
int main()
{
int i, j, n, a=1, arr[100][100] = {};
int direction=0;
scanf("%d", &n);
i = n+1;
j = 0;
while(1)
{
if(direction==0){
i--;
j++;
}
else if(direction==1){
i++;
j--;
}
arr[i][j] = a++;
if(i==n&&j==n) break;
if(direction==0 && j == n){
direction=1;
j++;
}
else if(direction == 1 && i == n){
direction = 0;
i++;
}
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}