uses crt;
var n,i,j:longint; a:array[1..1000,1..1000]of longint;
procedure make;
var i,x,y,k,z:longint;
begin
x:=1; y:=1; k:=1; i:=0;
repeat
inc(i);
a[x,y]:=i;
if (x=1)and(y<>n) then begin inc(y); k:=2; inc(i); a[x,y]:=i; end else
if (y=1)and(x<>n) then begin inc(x); k:=1; inc(i); a[x,y]:=i; end else
if x=n then begin inc(y); k:=1; inc(i); a[x,y]:=i; end else
if y=n then begin inc(x); k:=2; inc(i); a[x,y]:=i; end;
if k=1 then begin dec(x); inc(y) end else
if k=2 then begin inc(x); dec(y) end;
until i>=n*n-3;
a[n,n]:=n*n; a[n,n-1]:=n*n-1
end;
begin
clrscr;
write('n=');readln(n);
make;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:5);
writeln;
end;
readln
end.