node(a). node(b). node(c). node(d). node(e).
node(f). node(g). node(h). node(i). node(j).
node(k). node(l). node(m). node(n). node(o).
node(p). node(q). node(r). node(s). node(t).
node(u). node(v). node(w).

link(a,b,2).  link(a,c,8).  link(a,d,10). link(a,e,5).
link(b,a,2).  link(b,d,14). link(b,j,17).
link(c,a,8).  link(c,d,12). link(c,g,3).  link(c,h,10).
link(d,a,10). link(d,b,14). link(d,c,12). link(d,h,4).
link(e,a,5).  link(e,f,2).  link(e,n,6).
link(f,e,2).  link(f,g,6).  link(f,o,6).
link(g,c,3).  link(g,f,6).  link(g,o,4).
link(h,c,10). link(h,d,4).  link(h,t,8).
link(i,j,8).  link(i,k,4).  link(i,l,6).
link(j,b,17). link(j,i,8).  link(j,s,6).
link(k,i,4).  link(k,p,12). link(k,q,12).
link(l,i,6).  link(l,m,12). link(l,q,8).
link(m,j,10). link(m,l,12). link(m,r,8).
link(n,e,6).  link(n,o,2).  link(n,v,4).
link(o,f,6).  link(o,g,4).  link(o,n,2).  link(o,v,12).
link(p,k,12). link(p,t,6).  link(p,u,4).
link(q,k,12). link(q,l,8).  link(q,r,10).
link(r,m,8).  link(r,q,10). link(r,s,12).
link(s,j,6).  link(s,r,12). link(s,w,13).
link(t,h,8).  link(t,p,6).  link(t,u,14).
link(u,p,4).  link(u,t,14). link(u,w,10).
link(v,n,4).  link(v,o,12). link(v,w,2).
link(w,s,13). link(w,u,10). link(w,v,2).

prime(2).
prime(N) :- N>1, N mod 2 =\=0, primetest(N,3).
primetest(N,M) :- N>M, N mod M =\= 0, K is M+2, primetest(N,K).
primetest(N,N).

path(A,P,B,Q,[[A,P],[B,Q]]) :- R is Q-P, link(A,B,R).
path(A,P,B,Q,X) :- link(A,C,L), R is P+L, R<Q, prime(R), path(C,R,B,Q,Y), X=[[A,P]|Y].

solution(X,Q) :- prime(Q), node(A), path(A,0,A,Q,X).
solution(X) :- solutionsearch(X,3).
solutionsearch(X,Q) :- prime(Q),solution(X,Q).
solutionsearch(X,Q) :- R is Q+2, solutionsearch(X,R).


