#include <iostream>
using namespace std;
struct A
{
virtual void go(){ cout << "A" << endl; }
virtual ~A(){}
};
struct B : A
{
void go(){ cout << "B" << endl; }
virtual ~B(){}
};
struct C : B
{
void go(){ cout << "C" << endl; }
virtual ~C(){}
};
struct D : B
{
virtual void go(){ cout << "D" << endl; }
virtual ~D(){}
};
int main()
{
B b;
C c;
D d;
A &a1 (b);
A &a2 (c);
A &a3 (d);
a1.go();
a2.go();
a3.go();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEEKewoJdmlydHVhbCB2b2lkIGdvKCl7IGNvdXQgPDwgIkEiIDw8IGVuZGw7IH0KCXZpcnR1YWwgfkEoKXt9Cn07CnN0cnVjdCBCIDogQQp7Cgl2b2lkIGdvKCl7IGNvdXQgPDwgIkIiIDw8IGVuZGw7IH0KCXZpcnR1YWwgfkIoKXt9Cn07CnN0cnVjdCBDIDogQgp7Cgl2b2lkIGdvKCl7IGNvdXQgPDwgIkMiIDw8IGVuZGw7IH0KCXZpcnR1YWwgfkMoKXt9Cn07CnN0cnVjdCBEIDogQgp7Cgl2aXJ0dWFsIHZvaWQgZ28oKXsgY291dCA8PCAiRCIgPDwgZW5kbDsgfQoJdmlydHVhbCB+RCgpe30KfTsKCmludCBtYWluKCkKewoJQiBiOwoJQyBjOwoJRCBkOwoJQSAmYTEgKGIpOwoJQSAmYTIgKGMpOwoJQSAmYTMgKGQpOwoJYTEuZ28oKTsKCWEyLmdvKCk7CglhMy5nbygpOwp9