sig
  type t
  type vertex
  val n : t -> int
  val iter_vertex : (vertex -> unit) -> t -> unit
  val iter_succ : (vertex -> unit) -> t -> vertex -> unit
  module V :
    sig
      type t
      type key = vertex
      type value = vertex
      val create : int -> t
      val set : t -> key -> value -> unit
      val get : t -> key -> value
    end
  module I :
    sig
      type t
      type key = vertex
      type value = int
      val create : int -> t
      val set : t -> key -> value -> unit
      val get : t -> key -> value
    end
  val m : t -> int
  val string_of_vertex : t -> vertex -> string
  val create : ?n:int -> ?m:int -> unit -> t
  type node
  val vertex : t -> Sig.Graph.node -> vertex
  val node : t -> vertex -> Sig.Graph.node
  val add_node : t -> Sig.Graph.node -> unit
  val add_edge : t -> Sig.Graph.node -> Sig.Graph.node -> unit
  val iter_edges : (Sig.Graph.node -> Sig.Graph.node -> unit) -> t -> unit
end