#include <iostream>
using namespace std;
struct B {
virtual int f() {return 1;}
};
struct D1 : virtual public B {
virtual int f(){return 2;}
};
struct D2 : virtual public B{};
struct M : public D1, public D2 {
virtual int f() {return 3;}
virtual int g() {return D1::f();}
virtual int h() {return B::f();}
};
int main()
{
M m;
D1 *d1 = &m;
cout << m.f();
cout << d1->f();
cout << static_cast<D2&>(m).f();
cout << m.g();
cout << m.h();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnN0cnVjdCBCIHsKICAgIHZpcnR1YWwgaW50IGYoKSB7cmV0dXJuIDE7fQp9OwpzdHJ1Y3QgRDEgOiB2aXJ0dWFsIHB1YmxpYyBCIHsKICAgIHZpcnR1YWwgaW50IGYoKXtyZXR1cm4gMjt9Cn07CnN0cnVjdCBEMiA6ICB2aXJ0dWFsIHB1YmxpYyBCe307CnN0cnVjdCBNIDogcHVibGljIEQxLCBwdWJsaWMgRDIgewogICAgdmlydHVhbCBpbnQgZigpIHtyZXR1cm4gMzt9CiAgICB2aXJ0dWFsIGludCBnKCkge3JldHVybiBEMTo6ZigpO30KICAgIHZpcnR1YWwgaW50IGgoKSB7cmV0dXJuIEI6OmYoKTt9Cn07CiAKaW50IG1haW4oKQp7CiAgICBNIG07CiAgICBEMSAqZDEgPSAmbTsKICAgIGNvdXQgPDwgbS5mKCk7CiAgICBjb3V0IDw8IGQxLT5mKCk7CiAgICBjb3V0IDw8IHN0YXRpY19jYXN0PEQyJj4obSkuZigpOwogICAgY291dCA8PCBtLmcoKTsKICAgIGNvdXQgPDwgbS5oKCk7CiAgICByZXR1cm4gMDsKfQ==