functor (A : Traversal.A) (G : G->
  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
    val of_forest :
      ?tfac:float ->
      ?tadd:int -> Skeleton.Skeleton.T.t -> bool A.t * int A.t * int A.t
    module Bfs :
      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
    val of_graph_comp :
      ?tfac:float ->
      ?tadd:int ->
      ?girth:int ->
      G.t -> Skeleton.Skeleton.Bfs.Queue.V.elt -> G.t * G.t * G.t * int
  end