#include <iostream>
using namespace std;
typedef struct a{
int* c;
}a,*a_;
void init(a_ &b,int n) {
b = (a_)malloc(sizeof(a) * (n));
for (int i = 0; i < n; i++)
b[i].c = (int*)malloc(sizeof(int*) * n);
}
int main() {
int n;
cin >> n;
a_ b;
init(b, n);
int t = 1,m=0;
while (m < (n + 1) / 2) {
for (int i = 0 + m; i < n - m; i++)
b[0 + m].c[i] = t++;
for (int i = 1+m; i < n - m; i++)
b[i].c[n - 1 - m] = t++;
for (int i = n - 2-m; i >= 0 + m; i--)
b[n - 1 - m].c[i] = t++;
for (int i = n - 2-m; i > 0 + m; i--)
b[i].c[0 + m] = t++;
m++;
}
for (int i = 0; i < n; i++){
printf("\n")
for (int j = 0; j < n; j++){
printf("%3d", b[i].c[j]);
}
}
return 0;
}