let undirect g =
    let g2 = UndG.create () in
    G.iter_vertex (fun v ->
      UndG.add_vertex g2 v;
      G.iter_succ (fun v' ->
        UndG.add_edge g2 v v'
      ) g v;
      G.iter_pred (fun v' ->
        UndG.add_edge g2 v' v
      ) g v
    ) g;
    g2