sig
  module T :
    sig
      type visit_info =
        Traversal.Traversal(A).visit_info = {
        nb : int;
        dist : int;
        parent : int;
      }
      type t =
        Traversal.Traversal(A).t = {
        visit : visit_info A.t;
        mutable n : int;
      }
      val non_vertex : int
      val visit_nb : t -> int -> int
      val visited : t -> int -> bool
      val parent : t -> int -> int
      val dist : t -> int -> int
      val nb_visited : t -> int
      val nb_nodes : t -> int
      exception Found of int
      val last_visited : t -> int
      val order : t -> int A.t
      val iter_path : (int -> 'a) -> t -> int -> int -> unit
      val fold_path : (int -> '-> 'a) -> t -> int -> int -> '-> 'a
      val path_rev : t -> int -> int -> int list
      val path : t -> int -> int -> int list
      val make : int -> t
      val set : t -> int -> int -> int -> int -> unit
    end
  type visit_info =
    Traversal.Traversal(A).visit_info = {
    nb : int;
    dist : int;
    parent : int;
  }
  type t =
    Traversal.Traversal(A).t = {
    visit : visit_info A.t;
    mutable n : int;
  }
  val non_vertex : int
  val visit_nb : t -> int -> int
  val visited : t -> int -> bool
  val parent : t -> int -> int
  val dist : t -> int -> int
  val nb_visited : t -> int
  val nb_nodes : t -> int
  val last_visited : t -> int
  val order : t -> int A.t
  val iter_path : (int -> 'a) -> t -> int -> int -> unit
  val fold_path : (int -> '-> 'a) -> t -> int -> int -> '-> 'a
  val path_rev : t -> int -> int -> int list
  val path : t -> int -> int -> int list
  val make : int -> t
  val set : t -> int -> int -> int -> int -> unit
  module Queue :
    sig
      module V :
        sig
          type t = Traversal.Bfs(A)(G).Queue.V.t
          type elt = int
          val make : ?size:int -> unit -> t
          val set : t -> int -> elt -> unit
          val get : t -> int -> elt
          val clear : t -> unit
          val index_max : t -> int
          val length : t -> int
          val capacity : t -> int
          val blit : t -> int -> t -> int -> int -> unit
          val default : unit -> elt
        end
      type t =
        Traversal.Bfs(A)(G).Queue.t = {
        mutable v : V.t;
        mutable front : int;
        mutable back : int;
      }
      type elt = V.elt
      val create : ?size:int -> unit -> t
      val is_empty : t -> bool
      val clear : t -> unit
      val add : t -> V.elt -> unit
      val peek : t -> V.elt
      val compact : t -> unit
      val pop : t -> V.elt
      val size : t -> int
    end
  exception Found of T.t
  val forest :
    ?find:Queue.V.elt option ->
    ?follow_succ:bool -> ?follow_pred:bool -> G.t -> Queue.V.elt list -> T.t
  val tree :
    ?follow_succ:bool -> ?follow_pred:bool -> G.t -> Queue.V.elt -> T.t
  val find_dist :
    ?follow_succ:bool ->
    ?follow_pred:bool -> G.t -> Queue.V.elt -> Queue.V.elt -> int
end