#include <iostream>
class Base {
    virtual int do_f() { return 1; }
public:
    int f() { return this->do_f(); }
};
class Derived: Base {
    int do_f() { return 2; }
public:
    int g() { return this->f(); }
};
class Final: public Derived {
    int do_f() { return 3; }
};

int main() {
    Final final;
    std::cout << final.g() << '\n';
}
