:- module(queen).
:- export queen/2.
queen(Data, Out) :-
qperm(Data, Out),
safe(Out).
qperm([], []).
qperm([X|Y], [U|V]) :-
qdelete(U, X, Y, Z),
qperm(Z, V).
qdelete(A, A, L, L).
qdelete(X, A, [H|T], [A|R]) :-
qdelete(X, H, T, R).
safe([]).
safe([N|L]) :-
nodiag(L, N, 1),
safe(L).
nodiag([], _, _).
nodiag([N|L], B, D) :-
D =\= N - B,
D =\= B - N,
D1 is D + 1,
nodiag(L, B, D1).