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