import java.io.*;
import java.util.*;
public class mofang{
public static void main(String []args){
Scanner sc=new Scanner(System.in); //输入一个数
int count=0;
count=sc.nextInt();
int a[][]=new int[count+1][count+1];//初始化为0
int i,j,num=1;//num记录当前的数,i是横向,j是竖向
int flag=0;//记录每一步 和 size一样就换方向
int size=count-1;//size为步长
i=1;j=1;
while(num<=count*count){ //num从1到count*count
//初始化
//1.向右
while(++flag<=size){//大于等于步长就换方向
a[i][j]=num;
j++; //想右走
num++;
}
flag=0;
if(size==1&&count%2!=0)//考虑奇数或者偶数
break;
//2.向下
while(++flag<=size){
a[i][j]=num;
//System.out.println("下"+num);
i++;
num++;
}
flag=0;
//3.向左
while(++flag<=size){
a[i][j]=num;
j--;
num++;
}
flag=0;
//4.向上
while(++flag<=size){
a[i][j]=num;
i--;
num++;
}
flag=0;
//改步长size=size-2,i不变,j+1
if(size==2){
size=size-1;
}
else
size=size-2;
i++;
j=j+1;
}
for(i=1;i<=count;i++){
for(j=1;j<=count;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
import java.util.*;
public class mofang{
public static void main(String []args){
Scanner sc=new Scanner(System.in); //输入一个数
int count=0;
count=sc.nextInt();
int a[][]=new int[count+1][count+1];//初始化为0
int i,j,num=1;//num记录当前的数,i是横向,j是竖向
int flag=0;//记录每一步 和 size一样就换方向
int size=count-1;//size为步长
i=1;j=1;
while(num<=count*count){ //num从1到count*count
//初始化
//1.向右
while(++flag<=size){//大于等于步长就换方向
a[i][j]=num;
j++; //想右走
num++;
}
flag=0;
if(size==1&&count%2!=0)//考虑奇数或者偶数
break;
//2.向下
while(++flag<=size){
a[i][j]=num;
//System.out.println("下"+num);
i++;
num++;
}
flag=0;
//3.向左
while(++flag<=size){
a[i][j]=num;
j--;
num++;
}
flag=0;
//4.向上
while(++flag<=size){
a[i][j]=num;
i--;
num++;
}
flag=0;
//改步长size=size-2,i不变,j+1
if(size==2){
size=size-1;
}
else
size=size-2;
i++;
j=j+1;
}
for(i=1;i<=count;i++){
for(j=1;j<=count;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}