sig
  module type S =
    sig
      type t
      module V :
        sig
          type t
          val compare : Sig_pack.S.V.t -> Sig_pack.S.V.t -> int
          val hash : Sig_pack.S.V.t -> int
          val equal : Sig_pack.S.V.t -> Sig_pack.S.V.t -> bool
          type label = int
          val create : Sig_pack.S.V.label -> Sig_pack.S.V.t
          val label : Sig_pack.S.V.t -> Sig_pack.S.V.label
        end
      type vertex = Sig_pack.S.V.t
      module E :
        sig
          type t
          val compare : Sig_pack.S.E.t -> Sig_pack.S.E.t -> int
          val src : Sig_pack.S.E.t -> Sig_pack.S.V.t
          val dst : Sig_pack.S.E.t -> Sig_pack.S.V.t
          type label = int
          val create :
            Sig_pack.S.V.t ->
            Sig_pack.S.E.label -> Sig_pack.S.V.t -> Sig_pack.S.E.t
          val label : Sig_pack.S.E.t -> Sig_pack.S.E.label
          type vertex = Sig_pack.S.V.t
        end
      type edge = Sig_pack.S.E.t
      val is_directed : bool
      val create : ?size:int -> unit -> Sig_pack.S.t
      val clear : Sig_pack.S.t -> unit
      val copy : Sig_pack.S.t -> Sig_pack.S.t
      val add_vertex : Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val remove_vertex : Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val add_edge : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t -> unit
      val add_edge_e : Sig_pack.S.t -> Sig_pack.S.E.t -> unit
      val remove_edge :
        Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t -> unit
      val remove_edge_e : Sig_pack.S.t -> Sig_pack.S.E.t -> unit
      module Mark :
        sig
          type graph = Sig_pack.S.t
          type vertex = Sig_pack.S.V.t
          val clear : Sig_pack.S.t -> unit
          val get : Sig_pack.S.V.t -> int
          val set : Sig_pack.S.V.t -> int -> unit
        end
      val is_empty : Sig_pack.S.t -> bool
      val nb_vertex : Sig_pack.S.t -> int
      val nb_edges : Sig_pack.S.t -> int
      val out_degree : Sig_pack.S.t -> Sig_pack.S.V.t -> int
      val in_degree : Sig_pack.S.t -> Sig_pack.S.V.t -> int
      val mem_vertex : Sig_pack.S.t -> Sig_pack.S.V.t -> bool
      val mem_edge : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t -> bool
      val mem_edge_e : Sig_pack.S.t -> Sig_pack.S.E.t -> bool
      val find_edge :
        Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t
      val find_all_edges :
        Sig_pack.S.t ->
        Sig_pack.S.V.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t list
      val succ : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t list
      val pred : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.V.t list
      val succ_e : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t list
      val pred_e : Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t list
      val iter_vertex : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
      val iter_edges :
        (Sig_pack.S.V.t -> Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
      val fold_vertex :
        (Sig_pack.S.V.t -> '-> 'a) -> Sig_pack.S.t -> '-> 'a
      val fold_edges :
        (Sig_pack.S.V.t -> Sig_pack.S.V.t -> '-> 'a) ->
        Sig_pack.S.t -> '-> 'a
      val map_vertex :
        (Sig_pack.S.V.t -> Sig_pack.S.V.t) -> Sig_pack.S.t -> Sig_pack.S.t
      val iter_edges_e : (Sig_pack.S.E.t -> unit) -> Sig_pack.S.t -> unit
      val fold_edges_e :
        (Sig_pack.S.E.t -> '-> 'a) -> Sig_pack.S.t -> '-> 'a
      val iter_succ :
        (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val iter_pred :
        (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val fold_succ :
        (Sig_pack.S.V.t -> '-> 'a) ->
        Sig_pack.S.t -> Sig_pack.S.V.t -> '-> 'a
      val fold_pred :
        (Sig_pack.S.V.t -> '-> 'a) ->
        Sig_pack.S.t -> Sig_pack.S.V.t -> '-> 'a
      val iter_succ_e :
        (Sig_pack.S.E.t -> unit) -> Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val fold_succ_e :
        (Sig_pack.S.E.t -> '-> 'a) ->
        Sig_pack.S.t -> Sig_pack.S.V.t -> '-> 'a
      val iter_pred_e :
        (Sig_pack.S.E.t -> unit) -> Sig_pack.S.t -> Sig_pack.S.V.t -> unit
      val fold_pred_e :
        (Sig_pack.S.E.t -> '-> 'a) ->
        Sig_pack.S.t -> Sig_pack.S.V.t -> '-> 'a
      val find_vertex : Sig_pack.S.t -> int -> Sig_pack.S.V.t
      val transitive_closure :
        ?reflexive:bool -> Sig_pack.S.t -> Sig_pack.S.t
      val add_transitive_closure :
        ?reflexive:bool -> Sig_pack.S.t -> Sig_pack.S.t
      val transitive_reduction :
        ?reflexive:bool -> Sig_pack.S.t -> Sig_pack.S.t
      val replace_by_transitive_reduction :
        ?reflexive:bool -> Sig_pack.S.t -> Sig_pack.S.t
      val mirror : Sig_pack.S.t -> Sig_pack.S.t
      val complement : Sig_pack.S.t -> Sig_pack.S.t
      val intersect : Sig_pack.S.t -> Sig_pack.S.t -> Sig_pack.S.t
      val union : Sig_pack.S.t -> Sig_pack.S.t -> Sig_pack.S.t
      module Dfs :
        sig
          val iter :
            ?pre:(Sig_pack.S.V.t -> unit) ->
            ?post:(Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
          val prefix : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
          val postfix : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
          val fold : (Sig_pack.S.V.t -> '-> 'a) -> '-> Sig_pack.S.t -> 'a
          val iter_component :
            ?pre:(Sig_pack.S.V.t -> unit) ->
            ?post:(Sig_pack.S.V.t -> unit) ->
            Sig_pack.S.t -> Sig_pack.S.V.t -> unit
          val prefix_component :
            (Sig_pack.S.V.t -> unit) ->
            Sig_pack.S.t -> Sig_pack.S.V.t -> unit
          val postfix_component :
            (Sig_pack.S.V.t -> unit) ->
            Sig_pack.S.t -> Sig_pack.S.V.t -> unit
          val fold_component :
            (Sig_pack.S.V.t -> '-> 'a) ->
            '-> Sig_pack.S.t -> Sig_pack.S.V.t -> 'a
          val has_cycle : Sig_pack.S.t -> bool
        end
      module Bfs :
        sig
          val iter : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
          val iter_component :
            (Sig_pack.S.V.t -> unit) ->
            Sig_pack.S.t -> Sig_pack.S.V.t -> unit
        end
      module Marking :
        sig
          val dfs : Sig_pack.S.t -> unit
          val has_cycle : Sig_pack.S.t -> bool
        end
      module Classic :
        sig
          val divisors : int -> Sig_pack.S.t
          val de_bruijn : int -> Sig_pack.S.t
          val vertex_only : int -> Sig_pack.S.t
          val full : ?self:bool -> int -> Sig_pack.S.t
        end
      module Rand :
        sig
          val graph : ?loops:bool -> v:int -> e:int -> unit -> Sig_pack.S.t
          val labeled :
            (Sig_pack.S.V.t -> Sig_pack.S.V.t -> Sig_pack.S.E.label) ->
            ?loops:bool -> v:int -> e:int -> unit -> Sig_pack.S.t
          val gnp :
            ?loops:bool -> v:int -> prob:float -> unit -> Sig_pack.S.t
          val gnp_labeled :
            (Sig_pack.S.V.t -> Sig_pack.S.V.t -> Sig_pack.S.E.label) ->
            ?loops:bool -> v:int -> prob:float -> unit -> Sig_pack.S.t
        end
      module Components :
        sig
          val scc : Sig_pack.S.t -> int * (Sig_pack.S.V.t -> int)
          val scc_array : Sig_pack.S.t -> Sig_pack.S.V.t list array
          val scc_list : Sig_pack.S.t -> Sig_pack.S.V.t list list
        end
      val shortest_path :
        Sig_pack.S.t ->
        Sig_pack.S.V.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t list * int
      val ford_fulkerson :
        Sig_pack.S.t ->
        Sig_pack.S.V.t -> Sig_pack.S.V.t -> (Sig_pack.S.E.t -> int) * int
      val goldberg_tarjan :
        Sig_pack.S.t ->
        Sig_pack.S.V.t -> Sig_pack.S.V.t -> (Sig_pack.S.E.t -> int) * int
      val bellman_ford :
        Sig_pack.S.t -> Sig_pack.S.V.t -> Sig_pack.S.E.t list
      module PathCheck :
        sig
          type path_checker
          val create : Sig_pack.S.t -> Sig_pack.S.PathCheck.path_checker
          val check_path :
            Sig_pack.S.PathCheck.path_checker ->
            Sig_pack.S.V.t -> Sig_pack.S.V.t -> bool
        end
      module Topological :
        sig
          val fold : (Sig_pack.S.V.t -> '-> 'a) -> Sig_pack.S.t -> '-> 'a
          val iter : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
          val fold_stable :
            (Sig_pack.S.V.t -> '-> 'a) -> Sig_pack.S.t -> '-> 'a
          val iter_stable : (Sig_pack.S.V.t -> unit) -> Sig_pack.S.t -> unit
        end
      val spanningtree : Sig_pack.S.t -> Sig_pack.S.E.t list
      val dot_output : Sig_pack.S.t -> string -> unit
      val display_with_gv : Sig_pack.S.t -> unit
      val parse_gml_file : string -> Sig_pack.S.t
      val parse_dot_file : string -> Sig_pack.S.t
      val print_gml : Format.formatter -> Sig_pack.S.t -> unit
      val print_gml_file : Sig_pack.S.t -> string -> unit
    end
end