#include <iostream>
using namespace std;
class X { public:
virtual X& g (int a) {
cout << 4 << endl; return *this; }
virtual void f (X& ob) { ob.g(1);
cout << 3 << endl; }
};
struct Y: X { Y() { }
Y (const Y& ob) { }
Y& g (int a) {
cout << 9 << endl; return *this; }
virtual void f (Y& ob) { ob.g(7);
cout << 8 <<endl; }
};
int main() {
X *p = new Y();
try { Y x, *r = &x;
X *p = new Y();
X().f(x); p-> f(x); r -> f(x);
try { throw Y(); cout << 10 << endl; }
catch (X&){cout << 11 << endl; }
cout << 12 << endl; }
catch (Y&) {cout << 13 << endl; }
cout << 14 << endl;
delete p; return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgWCB7IHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgIAogIHZpcnR1YWwgWCYgZyAoaW50IGEpIHsgICAgICAgICAgICAgICAgICAKICAgIGNvdXQgPDwgNCA8PCBlbmRsOyByZXR1cm4gKnRoaXM7IH0gICAgICAgCiAgdmlydHVhbCB2b2lkIGYgKFgmIG9iKSB7IG9iLmcoMSk7ICAgICAgICAgIAogICAgY291dCA8PCAzIDw8IGVuZGw7IH0gICAgICAgICAgICAgICAgICAgICAKfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCnN0cnVjdCBZOiBYIHsgWSgpIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgWSAoY29uc3QgWSYgb2IpIHsgfSAgICAgICAgICAgICAgICAgICAgICAgIAogIFkmIGcgKGludCBhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgY291dCA8PCA5IDw8IGVuZGw7IHJldHVybiAqdGhpczsgfSAgICAgICAKICB2aXJ0dWFsIHZvaWQgZiAoWSYgb2IpIHsgb2IuZyg3KTsgICAgIAogICAgY291dCA8PCA4IDw8ZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7IAogICBYICpwID0gbmV3IFkoKTsKICAgdHJ5IHsgWSB4LCAqciA9ICZ4OwogICAgICAgICBYICpwID0gbmV3IFkoKTsKICAgICAgICAgWCgpLmYoeCk7IHAtPiBmKHgpOyByIC0+IGYoeCk7CiAgICAgICAgIHRyeSB7IHRocm93IFkoKTsgY291dCA8PCAxMCA8PCBlbmRsOyB9CiAgICAgICAgIGNhdGNoIChYJil7Y291dCA8PCAxMSA8PCBlbmRsOyB9CgogICAgICAgICBjb3V0IDw8IDEyIDw8IGVuZGw7IH0KICAgY2F0Y2ggKFkmKSAgICAgIHtjb3V0IDw8IDEzIDw8IGVuZGw7IH0KICAgY291dCA8PCAxNCA8PCBlbmRsOwogICBkZWxldGUgcDsgcmV0dXJuIDA7Cn0=