functor (G : G->
  functor
    (Tree : sig
              type t
              module V :
                sig
                  type t
                  type label = G.V.t
                  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->
    sig
      module Tree :
        sig
          type t = Tree.t
          module V :
            sig
              type t = Tree.V.t
              type label = G.V.t
              val create : label -> t
              val label : t -> label
              val hash : t -> int
              val equal : t -> t -> bool
            end
          module E :
            sig
              type t = Tree.E.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 : t -> Tree.t
      val get_root : t -> Tree.V.t
      val get_tree_vertices : Tree.V.label -> t -> Tree.V.t list
      val is_ghost_node : Tree.V.t -> t -> bool
      val is_ghost_edge : Tree.E.t -> t -> bool
      exception Ghost_node
      val get_graph_vertex : Tree.V.t -> t -> Tree.V.label
      val make : DGraphSubTree.G.t -> DGraphSubTree.G.V.t -> int -> int -> t
    end