sig   type 'a sequence = ('-> unit) -> unit   type 'a sequence_once = 'CCGraph.sequence   exception Sequence_once   module Seq :     sig       type 'a t = 'CCGraph.sequence       val return : '-> 'CCGraph.sequence       val ( >>= ) :         'CCGraph.Seq.t -> ('-> 'CCGraph.Seq.t) -> 'CCGraph.Seq.t       val map : ('-> 'b) -> 'CCGraph.Seq.t -> 'CCGraph.Seq.t       val filter_map :         ('-> 'b option) -> 'CCGraph.Seq.t -> 'CCGraph.Seq.t       val iter : ('-> unit) -> 'CCGraph.Seq.t -> unit       val fold : ('-> '-> 'b) -> '-> 'CCGraph.Seq.t -> 'b       val to_list : 'CCGraph.Seq.t -> 'a list     end   type ('v, 'e) t = '-> ('e * 'v) CCGraph.sequence   type ('v, 'e) graph = ('v, 'e) CCGraph.t   val make : ('-> ('e * 'v) CCGraph.sequence) -> ('v, 'e) CCGraph.t   type 'v tag_set = { get_tag : '-> bool; set_tag : '-> unit; }   type ('k, 'a) table = {     mem : '-> bool;     find : '-> 'a;     add : '-> '-> unit;   }   type 'a set = ('a, unit) CCGraph.table   val mk_table :     ?eq:('-> '-> bool) ->     ?hash:('-> int) -> int -> ('k, 'a) CCGraph.table   val mk_map : ?cmp:('-> '-> int) -> unit -> ('k, 'a) CCGraph.table   type 'a bag = {     push : '-> unit;     is_empty : unit -> bool;     pop : unit -> 'a;   }   val mk_queue : unit -> 'CCGraph.bag   val mk_stack : unit -> 'CCGraph.bag   val mk_heap : leq:('-> '-> bool) -> 'CCGraph.bag   module Traverse :     sig       type ('v, 'e) path = ('v * 'e * 'v) list       val generic :         ?tbl:'CCGraph.set ->         bag:'CCGraph.bag ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val generic_tag :         tags:'CCGraph.tag_set ->         bag:'CCGraph.bag ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val dfs :         ?tbl:'CCGraph.set ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val dfs_tag :         tags:'CCGraph.tag_set ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val bfs :         ?tbl:'CCGraph.set ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val bfs_tag :         tags:'CCGraph.tag_set ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence -> 'CCGraph.sequence_once       val dijkstra :         ?tbl:'CCGraph.set ->         ?dist:('-> int) ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence ->         ('v * int * ('v, 'e) CCGraph.Traverse.path) CCGraph.sequence_once       val dijkstra_tag :         ?dist:('-> int) ->         tags:'CCGraph.tag_set ->         graph:('v, 'e) CCGraph.t ->         'CCGraph.sequence ->         ('v * int * ('v, 'e) CCGraph.Traverse.path) CCGraph.sequence_once       module Event :         sig           type edge_kind = [ `Back | `Cross | `Forward ]           type ('v, 'e) t =               [ `Edge of 'v * 'e * 'v * CCGraph.Traverse.Event.edge_kind               | `Enter of 'v * int * ('v, 'e) CCGraph.Traverse.path               | `Exit of 'v ]           val get_vertex :             ('v, 'e) CCGraph.Traverse.Event.t ->             ('v * [ `Enter | `Exit ]) option           val get_enter : ('v, 'e) CCGraph.Traverse.Event.t -> 'v option           val get_exit : ('v, 'e) CCGraph.Traverse.Event.t -> 'v option           val get_edge :             ('v, 'e) CCGraph.Traverse.Event.t -> ('v * 'e * 'v) option           val get_edge_kind :             ('v, 'e) CCGraph.Traverse.Event.t ->             ('v * 'e * 'v * CCGraph.Traverse.Event.edge_kind) option           val dfs :             ?tbl:'CCGraph.set ->             ?eq:('-> '-> bool) ->             graph:('v, 'e) CCGraph.graph ->             'CCGraph.sequence ->             ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once           val dfs_tag :             ?eq:('-> '-> bool) ->             tags:'CCGraph.tag_set ->             graph:('v, 'e) CCGraph.graph ->             'CCGraph.sequence ->             ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once         end     end   val is_dag :     ?tbl:'CCGraph.set ->     graph:('v, 'a) CCGraph.t -> 'CCGraph.sequence -> bool   exception Has_cycle   val topo_sort :     ?eq:('-> '-> bool) ->     ?rev:bool ->     ?tbl:'CCGraph.set ->     graph:('v, 'e) CCGraph.t -> 'CCGraph.sequence -> 'v list   val topo_sort_tag :     ?eq:('-> '-> bool) ->     ?rev:bool ->     tags:'CCGraph.tag_set ->     graph:('v, 'e) CCGraph.t -> 'CCGraph.sequence -> 'v list   module Lazy_tree :     sig       type ('v, 'e) t = {         vertex : 'v;         children : ('e * ('v, 'e) CCGraph.Lazy_tree.t) list Lazy.t;       }       val map_v :         ('-> 'b) ->         ('a, 'e) CCGraph.Lazy_tree.t -> ('b, 'e) CCGraph.Lazy_tree.t       val fold_v :         ('acc -> '-> 'acc) -> 'acc -> ('v, 'a) CCGraph.Lazy_tree.t -> 'acc     end   val spanning_tree :     ?tbl:'CCGraph.set ->     graph:('v, 'e) CCGraph.t -> '-> ('v, 'e) CCGraph.Lazy_tree.t   val spanning_tree_tag :     tags:'CCGraph.tag_set ->     graph:('v, 'e) CCGraph.t -> '-> ('v, 'e) CCGraph.Lazy_tree.t   type 'v scc_state   val scc :     ?tbl:('v, 'CCGraph.scc_state) CCGraph.table ->     graph:('v, 'e) CCGraph.t ->     'CCGraph.sequence -> 'v list CCGraph.sequence_once   module Dot :     sig       type attribute =           [ `Color of string           | `Label of string           | `Other of string * string           | `Shape of string           | `Style of string           | `Weight of int ]       type vertex_state       val pp :         ?tbl:('v, CCGraph.Dot.vertex_state) CCGraph.table ->         ?eq:('-> '-> bool) ->         ?attrs_v:('-> CCGraph.Dot.attribute list) ->         ?attrs_e:('-> CCGraph.Dot.attribute list) ->         ?name:string ->         graph:('v, 'e) CCGraph.t -> Format.formatter -> '-> unit       val pp_seq :         ?tbl:('v, CCGraph.Dot.vertex_state) CCGraph.table ->         ?eq:('-> '-> bool) ->         ?attrs_v:('-> CCGraph.Dot.attribute list) ->         ?attrs_e:('-> CCGraph.Dot.attribute list) ->         ?name:string ->         graph:('v, 'e) CCGraph.t ->         Format.formatter -> 'CCGraph.sequence -> unit       val with_out : string -> (Format.formatter -> 'a) -> 'a     end   type ('v, 'e) mut_graph = {     graph : ('v, 'e) CCGraph.t;     add_edge : '-> '-> '-> unit;     remove : '-> unit;   }   val mk_mut_tbl :     ?eq:('-> '-> bool) ->     ?hash:('-> int) -> int -> ('v, 'a) CCGraph.mut_graph   module type MAP =     sig       type vertex       type 'a t       val as_graph :         'CCGraph.MAP.t -> (CCGraph.MAP.vertex, 'a) CCGraph.graph       val empty : 'CCGraph.MAP.t       val add_edge :         CCGraph.MAP.vertex ->         '-> CCGraph.MAP.vertex -> 'CCGraph.MAP.t -> 'CCGraph.MAP.t       val remove_edge :         CCGraph.MAP.vertex ->         CCGraph.MAP.vertex -> 'CCGraph.MAP.t -> 'CCGraph.MAP.t       val add : CCGraph.MAP.vertex -> 'CCGraph.MAP.t -> 'CCGraph.MAP.t       val remove : CCGraph.MAP.vertex -> 'CCGraph.MAP.t -> 'CCGraph.MAP.t       val union : 'CCGraph.MAP.t -> 'CCGraph.MAP.t -> 'CCGraph.MAP.t       val vertices : 'CCGraph.MAP.t -> CCGraph.MAP.vertex CCGraph.sequence       val vertices_l : 'CCGraph.MAP.t -> CCGraph.MAP.vertex list       val of_list :         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) list ->         'CCGraph.MAP.t       val add_list :         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) list ->         'CCGraph.MAP.t -> 'CCGraph.MAP.t       val to_list :         'CCGraph.MAP.t ->         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) list       val of_seq :         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) CCGraph.sequence ->         'CCGraph.MAP.t       val add_seq :         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) CCGraph.sequence ->         'CCGraph.MAP.t -> 'CCGraph.MAP.t       val to_seq :         'CCGraph.MAP.t ->         (CCGraph.MAP.vertex * 'a * CCGraph.MAP.vertex) CCGraph.sequence     end   module Map :     functor (O : Map.OrderedType->       sig         type vertex = O.t         type 'a t         val as_graph : 'a t -> (vertex, 'a) graph         val empty : 'a t         val add_edge : vertex -> '-> vertex -> 'a t -> 'a t         val remove_edge : vertex -> vertex -> 'a t -> 'a t         val add : vertex -> 'a t -> 'a t         val remove : vertex -> 'a t -> 'a t         val union : 'a t -> 'a t -> 'a t         val vertices : 'a t -> vertex sequence         val vertices_l : 'a t -> vertex list         val of_list : (vertex * 'a * vertex) list -> 'a t         val add_list : (vertex * 'a * vertex) list -> 'a t -> 'a t         val to_list : 'a t -> (vertex * 'a * vertex) list         val of_seq : (vertex * 'a * vertex) sequence -> 'a t         val add_seq : (vertex * 'a * vertex) sequence -> 'a t -> 'a t         val to_seq : 'a t -> (vertex * 'a * vertex) sequence       end   val of_list :     ?eq:('-> '-> bool) -> ('v * 'v) list -> ('v, unit) CCGraph.t   val of_hashtbl : ('v, 'v list) Hashtbl.t -> ('v, unit) CCGraph.t   val of_fun : ('-> 'v list) -> ('v, unit) CCGraph.t   val divisors_graph : (int, unit) CCGraph.t end