

queens(N, Qs) :- length(Qs, N), Qs ins 1..N, safeColumn(Qs), labeling([ffc], Qs).

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

safeColumn([],_,_).
safeColumn([Q|Qs], SelQ, Diagoff) :- SelQ #\= Q, abs(SelQ - Q) #\= Diagoff, Diagoff1 #= Diagoff + 1, safeColumn(Qs, SelQ, Diagoff1).