#include <iostream>
using namespace std;
class B
{
protected:
int i;
public:
B(int j = 5)
{
cout << " cb ";
i = j - 2;
}
~B() { cout << " db "; }
int get_i() { return i; }
};
class D1 : public B
{
int j;
public:
D1(int k = 10)
{
cout << " cd1 ";
j = i - k + 3;
}
~D1() { cout << " dd1 "; }
};
class D2 : public D1
{
int k;
public:
D2(int l = 15)
{
cout << " cd2 ";
k = i + j - l + 3;
}
~D2() { cout << " dd2 "; }
};
D1 f(D1 d1, D2 d2) { return d1.get_i() + d2.get_i(); }
int main()
{
D2 ob2;
D1 ob1(3);
cout << f(ob1, ob2).get_i() + ob2.get_i();
return 0;
}