#include <iostream>
using namespace std;

struct A {
  A(int a){cout<<1;}
  A(const A&a = A(1))
          {cout<<2;}
  A(A& a) {cout<<3;}
 ~A()     {cout<<'a';}
};



struct B:  A {
  B(const B& b)
     {cout<<4; }
  B(int i=0):A(*this)
     {cout<<5; }
 ~B(){ cout<<'b';}
}; 

int main(){
 {cout<< "start";}
 {cout<<endl; A a(1);}
 {cout<<endl; A a;}
 {cout<<endl; B b;}
  return 0;
}
