#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun()
{
cout << "Base";
}
};
class Der : public Base
{
Base* pb;
Der(Base* b) : pb(b) {}
public:
static Der Decorate(Base* b){ return Der(b); }
virtual void fun()
{
cout << "Der...";
pb->fun();
}
};
int main()
{
Der::Decorate(&Der::Decorate(&Base())).fun();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBCYXNlCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGZ1bigpCiAgICB7CiAgICAgICAgY291dCA8PCAiQmFzZSI7CiAgICB9Cn07CgpjbGFzcyBEZXIgOiBwdWJsaWMgQmFzZQp7CiAgICBCYXNlKiBwYjsKICAgIERlcihCYXNlKiBiKSA6IHBiKGIpIHt9CnB1YmxpYzoKICAgIHN0YXRpYyBEZXIgRGVjb3JhdGUoQmFzZSogYil7IHJldHVybiBEZXIoYik7IH0KICAgIHZpcnR1YWwgdm9pZCBmdW4oKQogICAgewogICAgICAgIGNvdXQgPDwgIkRlci4uLiI7CiAgICAgICAgcGItPmZ1bigpOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBEZXI6OkRlY29yYXRlKCZEZXI6OkRlY29yYXRlKCZCYXNlKCkpKS5mdW4oKTsKICAgIHJldHVybiAwOwp9