sig
  type ('v, 'e) path = ('v * 'e * 'v) list
  val generic :
    ?tbl:'v CCGraph.set ->
    bag:'v CCGraph.bag ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val generic_tag :
    tags:'v CCGraph.tag_set ->
    bag:'v CCGraph.bag ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val dfs :
    ?tbl:'v CCGraph.set ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val dfs_tag :
    tags:'v CCGraph.tag_set ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val bfs :
    ?tbl:'v CCGraph.set ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val bfs_tag :
    tags:'v CCGraph.tag_set ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence -> 'v CCGraph.sequence_once
  val dijkstra :
    ?tbl:'v CCGraph.set ->
    ?dist:('e -> int) ->
    graph:('v, 'e) CCGraph.t ->
    'v CCGraph.sequence ->
    ('v * int * ('v, 'e) CCGraph.Traverse.path) CCGraph.sequence_once
  val dijkstra_tag :
    ?dist:('e -> int) ->
    tags:'v CCGraph.tag_set ->
    graph:('v, 'e) CCGraph.t ->
    'v 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:'v CCGraph.set ->
        ?eq:('v -> 'v -> bool) ->
        graph:('v, 'e) CCGraph.graph ->
        'v CCGraph.sequence ->
        ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once
      val dfs_tag :
        ?eq:('v -> 'v -> bool) ->
        tags:'v CCGraph.tag_set ->
        graph:('v, 'e) CCGraph.graph ->
        'v CCGraph.sequence ->
        ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once
    end
end