database( {
g( From:string, To:string, Cost:integer)
}).
d(0, (a, 0)).
d(I+1, l_c<(Y, C)>) <- d(I, (X, C1)), g(X, Y, C2), C=C1+C2, ~solved(I,Y).
solved(I+1, X) <- solved(I, X).
solved(I, Y) <- d(I, (Y, _)).
single(l_c, (Y, C), (Y, C)).
multi(l_c, (Y1, C1), (Y2, C2), (Y2, C2)) <- C2 <C1.
multi(l_c, (Y1, C1), (Y2, C2), (Y1, C1)) <- C2 >= C1.
export d(I,X).