generic
    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 Value_Of (The_Iterator : in Iterator) return Vertex;
    with function Is_Done (The_Iterator : in Iterator) return Boolean;
package Graph_Search_Unbounded_Managed is

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

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

end Graph_Search_Unbounded_Managed;