var
a:array[0..26,0..26] of integer;
i,j,n:integer;
find:boolean;
procedure visit(i1,j1:integer);
begin
if find then exit;
a[i1,j1]:=i;
inc(i);
if i=n*n+1 then begin find:=true;exit;end;
if ((a[i1+1,j1]=0) and (a[i1,j1+1]<>0)) then visit(i1+1,j1)
else if a[i1,j1-1]=0 then visit(i1,j1-1)
else if a[i1-1,j1]=0 then visit(i1-1,j1)
else if ((a[i1,j1+1]=0) and (a[i1-1,j1]<>0)) then visit(i1,j1+1);
end;
begin
read(n);
for i:=0 to n+1 do
for j:=0 to n+1 do
a[i,j]:=-2;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=0;
i:=1;find:=false;
visit(1,n);
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5);
writeln;
end;
end.
a:array[0..26,0..26] of integer;
i,j,n:integer;
find:boolean;
procedure visit(i1,j1:integer);
begin
if find then exit;
a[i1,j1]:=i;
inc(i);
if i=n*n+1 then begin find:=true;exit;end;
if ((a[i1+1,j1]=0) and (a[i1,j1+1]<>0)) then visit(i1+1,j1)
else if a[i1,j1-1]=0 then visit(i1,j1-1)
else if a[i1-1,j1]=0 then visit(i1-1,j1)
else if ((a[i1,j1+1]=0) and (a[i1-1,j1]<>0)) then visit(i1,j1+1);
end;
begin
read(n);
for i:=0 to n+1 do
for j:=0 to n+1 do
a[i,j]:=-2;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=0;
i:=1;find:=false;
visit(1,n);
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5);
writeln;
end;
end.