let init_solver_pool map pool closure =
  let cudfpool = strip_cudf_pool pool in
  let solverpool = 
    Array.init (List.length closure) (fun sid ->
      let uid = map#inttovar sid in
      let (dll,cl) = cudfpool.(uid) in
      let sdll = 
        List.map (fun (vpkgs,uidl) ->
          (vpkgs,List.map map#vartoint uidl)
        ) dll
      in
      let scl = 
      (* ignore conflicts that are not in the closure.
       * if nobody depends on a conflict package, then it is irrelevant.
       * This requires a leap of faith in the user ability to build an
       * appropriate closure. If the closure is wrong, you are on your own *)

        List.map (fun (vpkg,uidl) ->
          let l =
            List.filter_map (fun uid -> 
              try Some(map#vartoint uid)
              with Not_found -> begin
                debug "Dropping Conflict %s" (Cudf_types_pp.string_of_vpkg vpkg) ;
                None
              end
            ) uidl
          in
          (vpkg, l)
        ) cl 
      in
      (sdll,scl)
    )
  in SolverPool solverpool