#include <iostream>
#include <unordered_map>
#include <functional>
#include <vector>
#include <iterator>

class Base
{
    public:
    static Base* build(std::istream& in)
    {
        int x;
        in >> x;
        return new Base(x);
    }
    Base(int x) {};
    virtual void whoAmI()
    {
        std::cout << "Base\n";
    }
};

class Derived: public Base
{
    public:
    static Derived* build(std::istream& in)
    {
        int x, y;
        in >> x >> y;
        return new Derived(x, y);
    }
    Derived(int x, int y) : Base(x) {};
    virtual void whoAmI() override
    {
        std::cout << "Derived\n";
    }
};

template <class OutputIterator>
OutputIterator loadData(std::istream& in, OutputIterator it)
{
    using map_type = const std::unordered_map<int, std::function<Base*(std::istream&)>>;
    static map_type builders = { {1, Base::build}, {2, Derived::build}, };
    int x;
    while(in >> x)
        *it++ = builders.at(x)(in);
    return it;
}


int main()
{
    std::vector<Base*> pointers;
    loadData(std::cin, std::back_inserter(pointers));
    for(auto p: pointers)
        p -> whoAmI();
}
