sig
  type t
  val print : Format.formatter -> t -> unit
  module Vertex :
    sig
      type t
      val print : Format.formatter -> t -> unit
      module Label : Print.PRINTABLE_TYPE
      val create : Label.t -> t
      val lbl : t -> Label.t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val hash : t -> int
    end
  module Edge :
    sig
      type t
      val print : Format.formatter -> t -> unit
      module Label : Print.PRINTABLE_TYPE
      val create : Vertex.t -> Label.t -> Vertex.t -> t
      val src : t -> Vertex.t
      val tgt : t -> Vertex.t
      val lbl : t -> Label.t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val hash : t -> int
    end
  val nb_vertices : t -> int
  val nb_edges : t -> int
  val mem_vertex : t -> Vertex.t -> bool
  val mem_edge : t -> Edge.t -> bool
  val iter_vertices : (Vertex.t -> unit) -> t -> unit
  val fold_vertices : (Vertex.t -> '-> 'a) -> t -> '-> 'a
  val iter_edges : (Edge.t -> unit) -> t -> unit
  val fold_edges : (Edge.t -> '-> 'a) -> t -> '-> 'a
  val iter_succ : (Edge.t -> unit) -> t -> Vertex.t -> unit
  val fold_succ : (Edge.t -> '-> 'a) -> t -> Vertex.t -> '-> 'a
  val iter_pred : (Edge.t -> unit) -> t -> Vertex.t -> unit
  val fold_pred : (Edge.t -> '-> 'a) -> t -> Vertex.t -> '-> 'a
  val create : int -> t
  val add_vertex : t -> Vertex.t -> unit
  val del_vertex : t -> Vertex.t -> unit
  val add_edge : t -> Edge.t -> unit
  val del_edge : t -> Edge.t -> unit
end