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
  type label
  val iter_labeled_succ : (label -> vertex -> unit) -> t -> vertex -> unit
  module WT :
    sig
      type t
      type key = vertex
      type value = label
      val create : int -> t
      val set : t -> key -> value -> unit
      val get : t -> key -> value
    end
  module W :
    sig
      type t = label
      val zero : t
      val infinity : t
      val compare : t -> t -> int
      val add : t -> t -> t
      val to_string : t -> string
    end
  val reverse : t -> t
end