Forzar a Prolog a elegir valores únicos de variables

OK, soy nuevo en Prolog, así que discúlpeme si esto es algo trivial, pero parece que no puedo encontrar una respuesta elegante y adecuada para esto. Estoy tratando de resolver el ejercicio aquí.learnprolognow.org, ejercicio 2.4 (el crucigrama).

El ejercicio proporciona estos hechos:

   word(astante,  a,s,t,a,n,t,e). 
   word(astoria,  a,s,t,o,r,i,a). 
   word(baratto,  b,a,r,a,t,t,o). 
   word(cobalto,  c,o,b,a,l,t,o). 
   word(pistola,  p,i,s,t,o,l,a). 
   word(statale,  s,t,a,t,a,l,e).

Y la solución que se me ocurrió para resolver la colocación del crucigrama de cada palabra es esta:

crossword(V1, V2, V3, H1, H2, H3) :-
   word(V1, V1a, V1bH1b, V1c, V1dH2b, V1e, V1fH3b, V1g), 
   word(V2, V2a, V2bH1d, V2c, V2dH2d, V2e, V2fH3d, V2g), 
   word(V3, V3a, V3bH1f, V3c, V3dH2f, V3e, V3fH3f, V3g), 
   word(H1, H1a, V1bH1b, H1c, V2bH1d, H1e, V3bH1f, H1g), 
   word(H2, H2a, V1dH2b, H2c, V2dH2d, H2e, V3dH2f, H2g), 
   word(H3, H3a, V1fH3b, H3c, V2fH3d, H3e, V3fH3f, H3g).

ConV1a aV1g siendo los caracteres de cada palabra, y laV1bH1b aV3fH3f siendo los caracteres en común entre las palabras del crucigrama.

La solución parece funcionar, sin embargo, el resultado está produciendo valores duplicados, con el primer resultado:

?- crossword(V1, V2, V3, H1, H2, H3).
V1 = astante,
V2 = baratto,
V3 = statale,
H1 = astante,
H2 = baratto,
H3 = statale .

¿Cómo puedo obligar a Prolog a tener?V1 \= V2 \= V3 \= H1 \= H2 \= H3 ? Si los hago individualmente uno por uno necesitaré 120 permutaciones, por lo que debe haber una manera más rápida, y este es un ejercicio para principiantes, así que debo estar perdiendo algo.

encontréesta pregunta similar, pero las respuestas proporcionadas parecen tan complicadas, espero que haya una manera más simple. Estoy usando swi-prolog en Ubuntu, por si acaso es importante.

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta