#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A"; }
A(const A&) { cout << "a"; }
};
class B : public virtual A {
public:
B() { cout << "B"; }
B(const B &b) : A(b) { cout << "b"; }
};
class C : public virtual A {
public:
C() { cout << "C"; }
C(const C &c) : A(c) { cout << "c"; }
};
class D : public B, C {
public:
D() { cout << "D"; }
D(const D &d) : A(d), B(d), C(d) { cout << "d"; }
};
int main()
{
D d;
D d2{d}; // or: D d2 = d;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgCmNsYXNzIEEgewpwdWJsaWM6CiAgICBBKCkgeyBjb3V0IDw8ICJBIjsgfQogICAgQShjb25zdCBBJikgeyBjb3V0IDw8ICJhIjsgfQp9OwoKY2xhc3MgQiA6IHB1YmxpYyB2aXJ0dWFsIEEgewpwdWJsaWM6CiAgICBCKCkgeyBjb3V0IDw8ICJCIjsgfQogICAgQihjb25zdCBCICZiKSA6IEEoYikgeyBjb3V0IDw8ICJiIjsgfQp9OwoKY2xhc3MgQyA6IHB1YmxpYyB2aXJ0dWFsIEEgewpwdWJsaWM6CiAgICBDKCkgeyBjb3V0IDw8ICJDIjsgfQogICAgQyhjb25zdCBDICZjKSA6IEEoYykgeyBjb3V0IDw8ICJjIjsgfQp9OwoKY2xhc3MgRCA6IHB1YmxpYyBCLCBDIHsKcHVibGljOgogICAgRCgpIHsgY291dCA8PCAiRCI7IH0KICAgIEQoY29uc3QgRCAmZCkgOiBBKGQpLCBCKGQpLCBDKGQpIHsgY291dCA8PCAiZCI7IH0KfTsKCmludCBtYWluKCkKewogICAgRCBkOwoJRCBkMntkfTsgLy8gb3I6IEQgZDIgPSBkOwogICAgcmV0dXJuIDA7Cn0=