#include<stdio.h>
int main(void){
int n;
scanf("%d",&n);
int arr[n][n];
int i,j;
int p=0,q=n;//行列
int count=1;
while(count<=n*n){
for(j=p;j<q;j++){//上行
arr[p][j]=count;
// printf("%d,%d=%d\n",p,j,arr[p][j]);
count++;
}
for(i=p+1;i<q;i++){//右竖
arr[i][q-1]=count;
// printf("%d,%d=%d\n",i,q-1,arr[i][q-1]);
count++;
}
for(j=q-2;j>=p;j--){
arr[q-1][j]=count;
// printf("%d,%d=%d\n",q-1,j,arr[q-1][j]);
count++;
}
for(i=q-2;i>p;i--){
arr[i][p]=count;
// printf("%d,%d=%d\n",i,p,arr[i][p]);
count++;
}
p++;
q--;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
int main(void){
int n;
scanf("%d",&n);
int arr[n][n];
int i,j;
int p=0,q=n;//行列
int count=1;
while(count<=n*n){
for(j=p;j<q;j++){//上行
arr[p][j]=count;
// printf("%d,%d=%d\n",p,j,arr[p][j]);
count++;
}
for(i=p+1;i<q;i++){//右竖
arr[i][q-1]=count;
// printf("%d,%d=%d\n",i,q-1,arr[i][q-1]);
count++;
}
for(j=q-2;j>=p;j--){
arr[q-1][j]=count;
// printf("%d,%d=%d\n",q-1,j,arr[q-1][j]);
count++;
}
for(i=q-2;i>p;i--){
arr[i][p]=count;
// printf("%d,%d=%d\n",i,p,arr[i][p]);
count++;
}
p++;
q--;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}