#include <iostream>
using namespace std;
class CBase{};
class CDerivedA: public CBase{};
class CDerivedB : public CBase{};
class CDerivedC : public CBase{};
template <typename T>
void Draw(T* face)
{
cout<<"Base"<<endl;
}
template <>
void Draw<>(CDerivedA* face)
{
cout<<"A"<<endl;
}
template <>
void Draw<>(CDerivedB* face)
{
cout<<"B"<<endl;
}
int main() {
CBase* a = new CDerivedA ();
CBase* b = new CDerivedB ();
CBase* c = new CDerivedC ();
Draw(a);
Draw(b);
Draw(c);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQ0Jhc2V7fTsKCmNsYXNzIENEZXJpdmVkQTogcHVibGljIENCYXNle307CgpjbGFzcyBDRGVyaXZlZEIgOiBwdWJsaWMgQ0Jhc2V7fTsKCmNsYXNzIENEZXJpdmVkQyA6IHB1YmxpYyBDQmFzZXt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgRHJhdyhUKiBmYWNlKQp7Cgljb3V0PDwiQmFzZSI8PGVuZGw7Cn0KCnRlbXBsYXRlIDw+CnZvaWQgRHJhdzw+KENEZXJpdmVkQSogZmFjZSkKewoJY291dDw8IkEiPDxlbmRsOwp9Cgp0ZW1wbGF0ZSA8Pgp2b2lkIERyYXc8PihDRGVyaXZlZEIqIGZhY2UpCnsKCWNvdXQ8PCJCIjw8ZW5kbDsKfQoKaW50IG1haW4oKSB7CglDQmFzZSogYSA9IG5ldyBDRGVyaXZlZEEgKCk7CiAgICBDQmFzZSogYiA9IG5ldyBDRGVyaXZlZEIgKCk7CglDQmFzZSogYyA9IG5ldyBDRGVyaXZlZEMgKCk7CgoJRHJhdyhhKTsKICAgIERyYXcoYik7CiAgICBEcmF3KGMpOwoKCXJldHVybiAwOwp9