#include <cstdio>
#include <cstring>
void printArr(int a[10][10], int len){
for (int i = 0; i < len; ++i){
for (int j = 0; j < len; ++j){
printf("%d ", a[i][j]);
}
printf("\n");
}
}
int src[10][10];
int dest[10][10];
int main(){
memset(src, 0, sizeof(src));
memset(dest, 0, sizeof(dest));
int len = 0;
scanf("%d", &len);
int n = 0;
for (int i = 0; i < len; ++i){
for (int j = 0; j < len; ++j){
src[i][j] = ++n;
}
}
printArr(src, len);
printf("\n");
/*左转90度*/
//使用新矩阵作旋转
for (int i = 0; i < len; ++i){
for (int j = 0; j < len; ++j){
dest[len - 1 - j][i] = src[i][j];
}
}
printArr(dest, len);
printf("\n");
//直接修改原矩阵
if (len % 2 == 0){
for (int i = 0; i < len / 2; ++i){
for (int j = 0; j < len / 2; ++j){
int x1 = len - 1 - j;
int y1 = i;
int x2 = len - 1 - y1;
int y2 = x1;
int x3 = len - 1 - y2;
int y3 = x2;
int tmp = src[x3][y3];
src[x3][y3] = src[x2][y2];
src[x2][y2] = src[x1][y1];
src[x1][y1] = src[i][j];
src[i][j] = tmp;
}
}
}
else{
for (int i = 0; i < len / 2; ++i){
for (int j = 0; j < len / 2; ++j){
int x1 = len - 1 - j;
int y1 = i;
int x2 = len - 1 - y1;
int y2 = x1;
int x3 = len - 1 - y2;
int y3 = x2;
int tmp = src[x3][y3];
src[x3][y3] = src[x2][y2];
src[x2][y2] = src[x1][y1];
src[x1][y1] = src[i][j];
src[i][j] = tmp;
}
}
for (int i = 0; i < (len - 1) / 2; ++i){
int x1 = len - 1 - (len - 1) / 2;
int y1 = i;
int x2 = len - 1 - y1;
int y2 = x1;
int x3 = len - 1 - y2;
int y3 = x2;
int tmp = src[x3][y3];
src[x3][y3] = src[x2][y2];
src[x2][y2] = src[x1][y1];
src[x1][y1] = src[i][(len - 1) / 2];
src[i][(len - 1) / 2] = tmp;
}
}
printArr(src, len);
}