Cod sursa(job #275869)
program n_dame;
var st:array [0..25] of integer;
sol,n:integer;
m:array [1..25,1..25] of char;
f1:text;
procedure tipar;
var i,j:integer;
begin
sol:=sol+1;
for i:=1 to n do
for j:=1 to n do
m[i,j]:='*';
for i:=1 to n do
m[i,st[i]]:='D';
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j]);
writeln;
end;
writeln;
readln;
end;
function valid(k:integer):boolean;
var i:integer;
begin
valid:=true;
for i:=1 to k-1 do
if (st[i]=st[k]) or (abs(st[k]-st[i])=k-i) then
valid:=false;
end;
procedure back(k:integer);
var i:integer;
begin
{if sol=0 then
begin }
for i:=1 to n do
begin
st[k]:=i;
if valid(k) then
if k=n then
tipar
else
back(k+1)
end;
{ end; }
end;
begin
assign(f1,'dame.in');
reset(f1);
readln(f1,n);
close(f1);
sol:=0;
back(1);
writeln('Sunt ',sol,' solutii!');
readln;
end.