#include <iostream>
using namespace std;
struct Command
{
virtual void Exe()
{ cout << "COMMAND" << endl; }
};
struct NewCommand : Command
{
void Exe() final
{ cout << "NEW" << endl; }
void Xe() {cout << "EXTRA" << endl;}
};
int main() {
// your code goes here
Command cmd1;
NewCommand cmd2;
cmd1.Exe();
cmd2.Exe();
static_cast<Command>(cmd2).Exe();
Command& cmd1p = cmd2;
cmd1p.Exe();
static_cast<NewCommand&>(cmd1p).Xe();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IENvbW1hbmQKewoJdmlydHVhbCB2b2lkIEV4ZSgpCgl7IGNvdXQgPDwgIkNPTU1BTkQiIDw8IGVuZGw7IH0KfTsKCnN0cnVjdCBOZXdDb21tYW5kIDogQ29tbWFuZAp7Cgl2b2lkIEV4ZSgpIGZpbmFsCgl7IGNvdXQgPDwgIk5FVyIgPDwgZW5kbDsgfQoJCgl2b2lkIFhlKCkge2NvdXQgPDwgIkVYVFJBIiA8PCBlbmRsO30KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJQ29tbWFuZCBjbWQxOwoJTmV3Q29tbWFuZCBjbWQyOwoJCgljbWQxLkV4ZSgpOwoJY21kMi5FeGUoKTsKCXN0YXRpY19jYXN0PENvbW1hbmQ+KGNtZDIpLkV4ZSgpOwoJQ29tbWFuZCYgY21kMXAgPSBjbWQyOwoJY21kMXAuRXhlKCk7CglzdGF0aWNfY2FzdDxOZXdDb21tYW5kJj4oY21kMXApLlhlKCk7CglyZXR1cm4gMDsKfQ==