#include <iostream>

struct A {
	A() { std::cout << "A()" << std::endl; }
	A(int) { std::cout << "A(int)" << std::endl; }
	A(const A&) { std::cout << "A(const A&)" << std::endl; }
	A& operator=(const A&) { std::cout << "A=()" << std::endl; return *this; }
	~A() { std::cout << "~A()" << std::endl; }
};

struct B {
	B() { std::cout << "B()" << std::endl; }
	B(int) { std::cout << "B(int)" << std::endl; }
	B(const B&) { std::cout << "B(const B&)" << std::endl; }
	~B() { std::cout << "~B()" << std::endl; }
	B& operator=(const B&) { std::cout << "B=()" << std::endl; return *this; }
};

struct C {
	B b;
	A a1;
	A a2;
	C() : a1(3){
		b = 3;
		a2 = 7;
	}
};

int main(){
	C c;
	return 0;
}