#include <iostream>
using namespace std;
#include <iomanip>
int list[100][100];
int inputdata;
void printList(int inputdata)
{
for (int i = 0; i < inputdata; i++)
{
for (int j = 0; j < inputdata; j++)
{
cout << setfill('0') << setw(2) << list[i][j] << " ";
}
cout << endl;
}
}
enum {
RIGHT = 0,
DOWN = 1,
LEFT = 2,
UP = 3,
};
bool CanGo(int x, int y)
{
if (x < 0 || x >= inputdata)
return false;
if (y < 0 || y >= inputdata)
return false;
if (list[x][y] != 0)
return false;
return true;
}
void buildList(int inputdata)
{
int x = 0, y = 0;
int total = 1;
int dir = RIGHT;
int dx[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };
while (true)
{
list[x][y] = total;
if (total == inputdata * inputdata)
break;
int nextX = x + dx[dir];
int nextY = y + dy[dir];
if (CanGo(nextX, nextY))
{
x = nextX;
y = nextY;
total++;
}
else
{
dir = (dir + 1) % 4;
}
}
}
int main()
{
cin >> inputdata;
buildList(inputdata);
printList(inputdata);
return 0;
}