Магические квадраты - [2] уровень

Условие:
Магическим называется квадрат, в котором сумма чисел по всем горизонталям, вертикалям и диагоналям совпадает. Найти все магические квадраты 3х3 составленые из девяти цифр (1..9).

Пример:

2

7

6

9

5

1

4

3

8

 

Решение:
label
l1,l2,l3,l4,l5,l6,l7,l8;
var
a1,a2,a3,a4,a5,a6,a7,a8,a9,x,n:integer;
begin
writeln('
Поиск магических квадратов 3*3...');
for a1:=1 to 9 do begin
for a2:=1 to 9 do begin
for a3:=1 to 9 do begin
for a4:=1 to 9 do begin
for a5:=1 to 9 do begin
for a6:=1 to 9 do begin
for a7:=1 to 9 do begin
for a8:=1 to 9 do begin
for a9:=1 to 9 do begin
if (a9=a8) or (a9=a7) or (a9=a6) or (a9=a5) or (a9=a4) or (a9=a3) or (a9=a2) or (a9=a1) then goto l1;
if (a8=a7) or (a8=a6) or (a8=a5) or (a8=a4) or (a8=a3) or (a8=a2) or (a8=a1) then goto l2;
if (a7=a6) or (a7=a5) or (a7=a4) or (a7=a3) or (a7=a2) or (a7=a1) then goto l3;
if (a6=a5) or (a6=a4) or (a6=a3) or (a6=a2) or (a6=a1) then goto l4;
if (a5=a4) or (a5=a3) or (a5=a2) or (a5=a1) then goto l5;
if (a4=a3) or (a4=a2) or (a4=a1) then goto l6;
if (a3=a2) or (a3=a1) then goto l7;
if (a2=a1) then goto l8;
x:=a1+a2+a3;
if (a4+a5+a6=x) and (a7+a8+a9=x) and (a1+a4+a7=x) and (a2+a5+a8=x) and
(a3+a6+a9=x) and (a1+a5+a9=x) and (a3+a5+a7=x)
then
begin
n:=n+1;
writeln('
Квадрат ',n);
writeln(a1,' ',a2,' ',a3);
writeln(a4,' ',a5,' ',a6);
writeln(a7,' ',a8,' ',a9);
readln;
end;
l1:end;l2:end;l3:end;l4:end;l5:end;l6:end;l7:end;l8:end;end;
end.