color(P,C):-
    nom_pays(P),
    length(P,N),
    length(C,N),
    fd_domain(C,1,4),
    constraints(P,C),
    fd_labeling(C).

constraints([_],[_]).
constraints([Pi|Ps],[Ci|Cs]):-
	cst_adj(Pi,Ps,Ci,Cs),
	constraints(Ps,Cs).	

cst_adj(_,[],_,[]).
cst_adj(Pi,[Pj|Ps],Ci,[Cj|Cs]):-
        voisin(Pi,Pj),
	Ci #\=Cj,
	cst_adj(Pi,Ps,Ci,Cs).

cst_adj(Pi,[Pj|Ps],Ci,[_Cj|Cs]):-
	\+ voisin(Pi,Pj),
	cst_adj(Pi,Ps,Ci,Cs).

voisin(Pi,Pj):-adj(Pi,Pj);adj(Pj,Pi).
  
% Jeu d'essai
nom_pays([allemagne,france,italie,autriche,suisse]).
adj(allemagne,france).
adj(allemagne,suisse).
adj(allemagne,autriche).
adj(france,italie).
adj(france,suisse).
adj(italie,autriche).
adj(italie,suisse).
adj(autriche,suisse).

/*
?- color(P,C).

C = [1,2,1,2,3]
P = [allemagne,france,italie,autriche,suisse] ? 

yes
| ?-  findall(C, color(P,C), L), length(L,N).

L = [[1,2,1,2,3],[1,2,1,2,4],[1,2,1,3,4],...,[4,3,4,3,2]]
N = 72



...

*/
