#include <iostream>
#include <memory>
using namespace std;
class second;
class first {
unique_ptr<second> p2;
first() {}
public:
static shared_ptr<first> create() {
shared_ptr<first> f{new first};
f->p2 = make_unique<second>(f);
return f;
}
};
class second {
shared_ptr<first> p1;
public:
second(shared_ptr<first> arg) : p1(arg) {}
};
int main()
{
auto f = first::create();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIHNlY29uZDsKCmNsYXNzIGZpcnN0IHsKCXVuaXF1ZV9wdHI8c2Vjb25kPiBwMjsKCWZpcnN0KCkge30KcHVibGljOgoJc3RhdGljIHNoYXJlZF9wdHI8Zmlyc3Q+IGNyZWF0ZSgpIHsKCQlzaGFyZWRfcHRyPGZpcnN0PiBme25ldyBmaXJzdH07CgkJZi0+cDIgPSBtYWtlX3VuaXF1ZTxzZWNvbmQ+KGYpOwoJCXJldHVybiBmOwoJfQp9OwoKY2xhc3Mgc2Vjb25kIHsKCXNoYXJlZF9wdHI8Zmlyc3Q+IHAxOwpwdWJsaWM6CglzZWNvbmQoc2hhcmVkX3B0cjxmaXJzdD4gYXJnKSA6IHAxKGFyZykge30KfTsKCmludCBtYWluKCkKewoJYXV0byBmID0gZmlyc3Q6OmNyZWF0ZSgpOwp9