#include <iostream>
#include <memory>
#include <string>
#include <vector>
using namespace std;
class Test {
private:
string _name;
vector<shared_ptr<Test>> _list;
public:
explicit Test(const string& S) : _name(S) { }
string to_string() const {
string s("[");
s += _name;
for (auto const& p : _list) {
s += ",";
s += p->to_string();
}
s += "]";
return s;
}
shared_ptr<Test> add(const string& S) {
auto p = make_shared<Test>(S);
_list.push_back(p);
return p;
}
};
int main() {
auto x = make_shared<Test>("one");
x->add("two");
auto y = x->add("three");
y->add("four");
cout << y->to_string() << '\n';
cout << x->to_string() << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdCB7CnByaXZhdGU6CiAgICBzdHJpbmcgX25hbWU7CiAgICB2ZWN0b3I8c2hhcmVkX3B0cjxUZXN0Pj4gX2xpc3Q7CnB1YmxpYzoKICAgIGV4cGxpY2l0IFRlc3QoY29uc3Qgc3RyaW5nJiBTKSA6IF9uYW1lKFMpIHsgfQoKICAgIHN0cmluZyB0b19zdHJpbmcoKSBjb25zdCB7CiAgICAgICAgc3RyaW5nIHMoIlsiKTsKICAgICAgICBzICs9IF9uYW1lOwoKICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHAgOiBfbGlzdCkgewogICAgICAgICAgICBzICs9ICIsIjsKICAgICAgICAgICAgcyArPSBwLT50b19zdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgIHMgKz0gIl0iOwogICAgICAgIHJldHVybiBzOwogICAgfQoKICAgIHNoYXJlZF9wdHI8VGVzdD4gYWRkKGNvbnN0IHN0cmluZyYgUykgewogICAgICAgIGF1dG8gcCA9IG1ha2Vfc2hhcmVkPFRlc3Q+KFMpOwogICAgICAgIF9saXN0LnB1c2hfYmFjayhwKTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgYXV0byB4ID0gbWFrZV9zaGFyZWQ8VGVzdD4oIm9uZSIpOwogICAgeC0+YWRkKCJ0d28iKTsKICAgIGF1dG8geSA9IHgtPmFkZCgidGhyZWUiKTsKICAgIHktPmFkZCgiZm91ciIpOwoKICAgIGNvdXQgPDwgeS0+dG9fc3RyaW5nKCkgPDwgJ1xuJzsKICAgIGNvdXQgPDwgeC0+dG9fc3RyaW5nKCkgPDwgJ1xuJzsKfQo=