let strongdeps_int ?(transitive=true) graph univ l =
  let cudfpool = Depsolver_int.init_pool_univ univ in
  Util.Progress.set_total mainbar (List.length l);
  Util.Timer.start strongtimer;
  List.iter (fun id ->
    Util.Progress.progress mainbar;
    G.add_vertex graph id;
    if somedisj cudfpool id then begin 
      let closure = Depsolver_int.dependency_closure_cache cudfpool [id] in
      let solver = Depsolver_int.init_solver_closure cudfpool closure in
      match Depsolver_int.solve solver (Diagnostic_int.Sng id) with
      |Diagnostic_int.Failure(_) -> ()
      |Diagnostic_int.Success(f) ->
          check_strong transitive graph solver id (f ())
    end
  ) l ;
  Util.Progress.reset mainbar;
  ignore (Util.Timer.stop strongtimer ());
  debug "strong dep graph: %d nodes, %d edges\n" (G.nb_vertex graph) (G.nb_edges graph);
  graph