generic
    type Graph is limited private;
    type Vertex is private;
    type Iterator is limited private;
    with procedure Initialize (The_Iterator : in out Iterator;
                               With_The_Vertex : in Vertex);
    with procedure Get_Next (The_Iterator : in out Iterator);
    with function Number_Of_Vertices_In (The_Graph : in Graph) return Natural;
    with function Value_Of (The_Iterator : in Iterator) return Vertex;
    with function Is_Done (The_Iterator : in Iterator) return Boolean;
package Graph_Search_Bounded_Managed is

    generic
        with procedure Process (The_Vertex : in Vertex; Continue : out Boolean);
    procedure Traverse_Depth_First
                 (From_The_Vertex : in Vertex; In_The_Graph : in Graph);

    generic
        with procedure Process (The_Vertex : in Vertex; Continue : out Boolean);
    procedure Traverse_Breadth_First
                 (From_The_Vertex : in Vertex; In_The_Graph : in Graph);

end Graph_Search_Bounded_Managed;