:- use_module(library(clpfd)).

queens(N,L) :-
	length(L,N),
	domain(L,1,N),
	all_safe(L),
	labeling( [ff],L).

all_safe([]).
all_safe([Q|Qs]) :- safe(Q,Qs,1), all_safe(Qs).

safe(_,[],_).
safe(Q,[Q1|Qs],P) :-
	no_attack(Q,Q1,P),
	P1 #= P+1,
	safe(Q,Qs,P1).

no_attack(Q,Q1,P) :-
	Q #\= Q1,
	Q #\= Q1+P,
	Q #\= Q1-P.

	