% Variant of a program by T. Fruhwrith
/*
  go: 87.586s jre + jvc -g
*/

go:-go(X),write(x),fail.
go.

go(Qs):-queens(8,Qs).

queens(N,Ps):-
  gen_places(N,Ps),
  gen_queens(N,Qs),
  place_queens(Qs,Ps,_,_).

% at each step inc Us and dec Ds
place_queens([],_,_,_).
place_queens([I|Is],Cs,Us,[_|Ds]):-
  place_queens(Is,Cs,[_|Us],Ds),
  place_queen(I,Cs,Us,Ds).

place_queen(I,[I|_],[I|_],[I|_]).
place_queen(I,[_|Cs],[_|Us],[_|Ds]):-
  place_queen(I,Cs,Us,Ds).

gen_places(Max,Ps):-
  findall(_,for(_,1,Max),Ps).

gen_queens(Max,Qs):-
  findall(Q,for(Q,1,Max),Qs).

qs(Ps):-
  eq(Ps,[_1,_2,_3,_4,_5 ,_6,_7,_8,_9]),
  place_queens([1,2,3,4,5,6,7,8,9],Ps,_,_).

