let build_paths deps root =
let bind m f = List.flatten (List.map f m) in
let rec aux acc deps root =
match List.partition (fun (i,_,_) -> CudfAdd.equal i root) deps with
|([],_) when (List.length acc) = 1 -> []
|(rootlist,_) ->
bind rootlist (function
|(i,v,[]) -> [List.rev acc]
|(i,v,l) -> bind l (fun r -> aux ((i,v)::acc) deps r)
)
in
aux [] deps root