sig
  module Tree :
    sig
      type t
      module V :
        sig
          type t
          type label
          val create : label -> t
          val label : t -> label
          val hash : t -> int
          val equal : t -> t -> bool
        end
      module E :
        sig
          type t
          val compare : t -> t -> int
          type vertex = V.t
          val src : t -> vertex
          val dst : t -> vertex
          type label = unit
          val create : vertex -> label -> vertex -> t
          val label : t -> label
        end
      val create : ?size:int -> unit -> t
      val add_vertex : t -> V.t -> unit
      val add_edge_e : t -> E.t -> unit
    end
  type t
  val get_structure : DGraphSubTree.S.t -> DGraphSubTree.S.Tree.t
  val get_root : DGraphSubTree.S.t -> DGraphSubTree.S.Tree.V.t
  val get_tree_vertices :
    DGraphSubTree.S.Tree.V.label ->
    DGraphSubTree.S.t -> DGraphSubTree.S.Tree.V.t list
  val is_ghost_node : DGraphSubTree.S.Tree.V.t -> DGraphSubTree.S.t -> bool
  val is_ghost_edge : DGraphSubTree.S.Tree.E.t -> DGraphSubTree.S.t -> bool
  exception Ghost_node
  val get_graph_vertex :
    DGraphSubTree.S.Tree.V.t ->
    DGraphSubTree.S.t -> DGraphSubTree.S.Tree.V.label
end