#include <iostream>
 
class A {
 public:
   A();
   ~A();
   void hello(const char* message);
   static A a;
};

class B {
 public:
   B();
   ~B();
   void hello(const char* message);
   static B b;
};

A::A() {
  std::cout << "A() is constructed\n";
  B::b.hello("constructur A()");
}

A::~A() {
  std::cout << "A() is destructed\n";
  B::b.hello("destructor A()");
}

void A::hello(const char* message) {
  std::cout << "Hello from A! (" << message << ")\n";
};

A A::a;

B::B() {
  std::cout << "B() is constructed\n";
  A::a.hello("constructor B()");
}

B::~B() {
  std::cout << "B() is destructed\n";
  A::a.hello("destructor B()");
}

void B::hello(const char* message) {
  std::cout << "Hello from B! (" << message << ")\n";
};

B B::b;
 
int main() {
}