functor (G : G->
  sig
    module Path :
      sig
        type t = G.Edge.t list
        val print : Format.formatter -> t -> unit
      end
    type traversal =
        Forward_path of Search.Make.Path.t
      | Backward_path of Search.Make.Path.t
      | Forward_reach of Search.G.Vertex.t list
      | Backward_reach of Search.G.Vertex.t list
    val fwd_dfs :
      Search.G.t ->
      Search.G.Vertex.t list ->
      Search.G.Vertex.t list -> Search.Make.traversal
    val fwd_bfs :
      Search.G.t ->
      Search.G.Vertex.t list ->
      Search.G.Vertex.t list -> Search.Make.traversal
    val bwd_dfs :
      Search.G.t ->
      Search.G.Vertex.t list ->
      Search.G.Vertex.t list -> Search.Make.traversal
    val bwd_bfs :
      Search.G.t ->
      Search.G.Vertex.t list ->
      Search.G.Vertex.t list -> Search.Make.traversal
  end