#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();
}