let pretty_graph ?(bw=false) fmt graph =
    let all = (* Sorted print is nicer for the user *)
      let r = ref [] in
      G.iter_vertex (fun n -> r := n :: !r) graph;
      List.sort Node.compare !r
    in
    let iter = if bw then G.iter_pred_e else G.iter_succ_e in
    let print_node n =  Format.fprintf fmt "%a@." Node.pretty_node n in
    let print_dpd d =
      let dpd_kind = G.E.label d in
      if bw then Format.fprintf fmt "  <-%a- %d@." G.pretty_edge_label dpd_kind
        (Node.elem_id (G.E.src d))
      else Format.fprintf fmt "  -%a-> %d@." G.pretty_edge_label dpd_kind
        (Node.elem_id (G.E.dst d))
    in
    let print_node_and_dpds n =
      print_node n;
      iter print_dpd graph n
    in
    List.iter print_node_and_dpds all