program Damen;

{ Findet Lösungen für das 8-Damen-Problem }

type
   Position = record
		 x : Word;
		 y : Word;
	      end; 
	    
var		  
   Koords : Array[1..8] of Position;
   Index  : Integer;
	  
function KeineKollision(Nr :  Word) : Boolean;
var
   Index : Integer;
   x	 : Word;
   y	 : Word;
begin	 
   x := Koords[Nr].x;
   y := Koords[Nr].y;
   KeineKollision := True;
   for Index := 1 to Nr-1 do
      if (Koords[Index].x = x)
	 or (Abs(Koords[Index].x - x) = Abs(Koords[Index].y -y))
	 then KeineKollision := False;
end;
   
procedure PlazierDame(Nr :  Word);
var
   Index : Integer;
   Dame	 : Integer;
begin	 
   Koords[Nr].y := Nr;  { Zeile fest }
   for Index := 1 to 8 do
   begin
      Koords[Nr].x := Index;
      if KeineKollision(Nr) then
      begin
	 if Nr = 8 then
	 begin
	    Write('Lösung: ');
	    for Dame := 1 to 8 do
	       Write('(',Koords[Dame].x,',',Koords[Dame].y,')');
	    Writeln;
	 end
	 else PlazierDame(Nr+1);
      end;
   end;
   Koords[Nr].x := 0;
   Koords[Nr].y := 0;
end;

begin
   for Index := 1 to 8 do
   begin
      Koords[Index].x := 0;
      Koords[Index].y := 0;
   end;
   PlazierDame(1);
end.
   
