uses crt;
const nmax=21;
var a:array[1..nmax,1..nmax]of integer;
n,i,j:integer;
x,y,num,add,dir:integer;
begin
clrscr;
repeat
write('Введите нечетное n=');
readln(n);
until(n in [1..nmax])and odd(n);
x:=1;
y:=0;
num:=10;
Add:=n;//длина первого отрезка пути
dir:=1;//направление вниз-вправо
while (add<>0) do//пока длина пути больше 0
begin
i:=0;
while (i<>add) do//пока не последняя не заполненная по ходу строка
begin
y:=y+dir;//вверх-вниз
a[y,x]:=num;
num:=num+10;
i:=i+1;
end;
i:=0;
add:=add-1;
while (i<>add) do//пока не последний не заполненный по ходу столбец
begin
x:=x+dir;//вправо-влево
a[y,x]:=num;
num:=num+10;
i:=i+1;
end;
dir:=dir*(-1);//меняем направление
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:6);
writeln;
end;
readln
end.