uses crt;
var a:array[1..20,1..20]of integer;
n,i,j:integer;
x,y,num,add,dir:integer;
begin
clrscr;
write('n=');readln(n);
x:=0;{выход слева в первой строке}
y:=1;{с поля [1,2]}
num:=0;
Add:=n;{максимальный путь в строке и столбце}
dir:=1;{направление вправо и вниз}
while (add<>0) do
begin
i:=0;
while (i<>add) do
begin
x:=x+dir;{вправо}
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
i:=0;
add:=add-1;
while (i<>add) do
begin
y:=y+dir;{вниз}
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
dir:=dir*(-1);{меняем направление (влево и вверх)}
end;
a[1,1]:=n*n;{первый элемент}
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln
end.