sig
  type vertex
  type hedge
  module SetV :
    sig
      type elt = vertex
      type t
      module Ord : sig type t = elt val compare : t -> t -> int end
      val repr : t -> elt Sette.tzz
      val obj : elt Sette.tzz -> t
      val splitzz :
        elt -> elt Sette.tzz -> elt Sette.tzz * bool * elt Sette.tzz
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        (Format.formatter -> elt -> unit) -> Format.formatter -> t -> unit
    end
  module SetH :
    sig
      type elt = hedge
      type t
      module Ord : sig type t = elt val compare : t -> t -> int end
      val repr : t -> elt Sette.tzz
      val obj : elt Sette.tzz -> t
      val splitzz :
        elt -> elt Sette.tzz -> elt Sette.tzz * bool * elt Sette.tzz
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        (Format.formatter -> elt -> unit) -> Format.formatter -> t -> unit
    end
  type ('a, 'b, 'c) t
  val create : int -> '-> ('b, 'c, 'a) SHGraph.S.t
  val clear : ('a, 'b, 'c) SHGraph.S.t -> unit
  val is_empty : ('a, 'b, 'c) SHGraph.S.t -> bool
  val size_vertex : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_hedge : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_edgevh : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_edgehv : ('a, 'b, 'c) SHGraph.S.t -> int
  val size : ('a, 'b, 'c) SHGraph.S.t -> int * int * int * int
  val attrvertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> 'a
  val attrhedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> 'b
  val info : ('a, 'b, 'c) SHGraph.S.t -> 'c
  val is_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> bool
  val is_hedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> bool
  val succhedge :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetH.t
  val predhedge :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetH.t
  val succvertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> SHGraph.S.vertex array
  val predvertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> SHGraph.S.vertex array
  val succ_vertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetV.t
  val pred_vertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetV.t
  val add_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> '-> unit
  val add_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.hedge ->
    '-> pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> unit
  val remove_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> unit
  val remove_hedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> unit
  val iter_vertex :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex ->
     '-> pred:SHGraph.S.SetH.t -> succ:SHGraph.S.SetH.t -> unit) ->
    unit
  val iter_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge ->
     '-> pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> unit) ->
    unit
  val fold_vertex :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex ->
     '-> pred:SHGraph.S.SetH.t -> succ:SHGraph.S.SetH.t -> '-> 'd) ->
    '-> 'd
  val fold_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge ->
     '->
     pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> '-> 'd) ->
    '-> 'd
  val map :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex ->
     '-> pred:SHGraph.S.SetH.t -> succ:SHGraph.S.SetH.t -> 'd) ->
    (SHGraph.S.hedge ->
     '-> pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> 'e) ->
    ('-> 'f) -> ('d, 'e, 'f) SHGraph.S.t
  val copy :
    (SHGraph.S.vertex -> '-> 'b) ->
    (SHGraph.S.hedge -> '-> 'd) ->
    ('-> 'f) -> ('a, 'c, 'e) SHGraph.S.t -> ('b, 'd, 'f) SHGraph.S.t
  val transpose :
    (SHGraph.S.vertex -> '-> 'b) ->
    (SHGraph.S.hedge -> '-> 'd) ->
    ('-> 'f) -> ('a, 'c, 'e) SHGraph.S.t -> ('b, 'd, 'f) SHGraph.S.t
  val min : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t
  val max : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t
  val topological_sort :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.vertex list
  val topological_sort_multi :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t -> SHGraph.S.vertex list
  val topological_sort_filter_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> bool) -> SHGraph.S.SetV.t -> SHGraph.S.vertex list
  val reachable :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.vertex -> SHGraph.S.SetV.t * SHGraph.S.SetH.t
  val reachable_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.SetV.t -> SHGraph.S.SetV.t * SHGraph.S.SetH.t
  val reachable_filter_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> bool) ->
    SHGraph.S.SetV.t -> SHGraph.S.SetV.t * SHGraph.S.SetH.t
  val cfc :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.vertex -> SHGraph.S.vertex list list
  val cfc_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.SetV.t -> SHGraph.S.vertex list list
  val cfc_filter_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> bool) ->
    SHGraph.S.SetV.t -> SHGraph.S.vertex list list
  val cfc_priority_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> int) ->
    SHGraph.S.SetV.t -> SHGraph.S.vertex list list
  val scfc :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.vertex Ilist.t
  val scfc_multi :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t -> SHGraph.S.vertex Ilist.t
  val scfc_filter_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> bool) -> SHGraph.S.SetV.t -> SHGraph.S.vertex Ilist.t
  val scfc_priority_multi :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge -> int) -> SHGraph.S.SetV.t -> SHGraph.S.vertex Ilist.t
  val print :
    (Format.formatter -> SHGraph.S.vertex -> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c) SHGraph.S.t -> unit
  val print_dot :
    ?titlestyle:string ->
    ?vertexstyle:string ->
    ?hedgestyle:string ->
    ?title:string ->
    (Format.formatter -> SHGraph.S.vertex -> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> unit) ->
    (Format.formatter -> SHGraph.S.vertex -> '-> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c) SHGraph.S.t -> unit
end