#include <iostream>
#include <string>
using namespace std;
class A
{
public:
virtual ~A() {}
string Name() { return DoName(); }
private:
virtual string DoName() { return "A"; }
};
class B1 : public A
{
string DoName() { return "B1"; }
};
class B2 : public A
{
string DoName() { return "B2"; }
};
class D : public A
{
string DoName() { return "D"; }
};
int main() {
A* a[] = { new A, new B1, new B2, new D };
for(A* e : a)
{
cout << e->Name() << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSAKewpwdWJsaWM6Cgl2aXJ0dWFsIH5BKCkge30KCXN0cmluZyBOYW1lKCkgeyByZXR1cm4gRG9OYW1lKCk7IH0KcHJpdmF0ZToKCXZpcnR1YWwgIHN0cmluZyBEb05hbWUoKSB7IHJldHVybiAgIkEiOyB9Cn07CgpjbGFzcyAgQjEgIDogIHB1YmxpYyBBICAKewoJc3RyaW5nIERvTmFtZSgpIHsgcmV0dXJuICJCMSI7IH0KfTsKIApjbGFzcyBCMiAgIDogIHB1YmxpYyBBIAp7CglzdHJpbmcgRG9OYW1lKCkgeyByZXR1cm4gIkIyIjsgfQp9OwogCmNsYXNzIEQgIDogICBwdWJsaWMgQQp7CglzdHJpbmcgRG9OYW1lKCkgIHsgcmV0dXJuICAiRCI7IH0gCn07CgppbnQgbWFpbigpIHsKCglBKiBhW10gPSB7IG5ldyBBLCBuZXcgQjEsIG5ldyBCMiwgbmV3IEQgfTsKCQoJZm9yKEEqIGUgOiBhKQoJewoJCWNvdXQgPDwgZS0+TmFtZSgpIDw8IGVuZGw7Cgl9CgkKCXJldHVybiAwOwp9