#include <iostream>
#include <memory>
#include <string>
#include <vector>
using namespace std;
class Test {
private:
string _name;
vector<unique_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;
}
Test& add(const string& S) {
_list.push_back(make_unique<Test>(S));
return *(_list.back());
}
};
int main() {
Test x("one");
x.add("two");
Test& y = x.add("three");
y.add("four");
cout << y.to_string() << '\n';
cout << x.to_string() << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdCB7CnByaXZhdGU6CiAgICBzdHJpbmcgX25hbWU7CiAgICB2ZWN0b3I8dW5pcXVlX3B0cjxUZXN0Pj4gX2xpc3Q7CnB1YmxpYzoKICAgIGV4cGxpY2l0IFRlc3QoY29uc3Qgc3RyaW5nJiBTKSA6IF9uYW1lKFMpIHsgfQoKICAgIHN0cmluZyB0b19zdHJpbmcoKSBjb25zdCB7CiAgICAgICAgc3RyaW5nIHMoIlsiKTsKICAgICAgICBzICs9IF9uYW1lOwoKICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHAgOiBfbGlzdCkgewogICAgICAgICAgICBzICs9ICIsIjsKICAgICAgICAgICAgcyArPSBwLT50b19zdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgIHMgKz0gIl0iOwogICAgICAgIHJldHVybiBzOwogICAgfQoKICAgIFRlc3QmIGFkZChjb25zdCBzdHJpbmcmIFMpIHsKICAgICAgICBfbGlzdC5wdXNoX2JhY2sobWFrZV91bmlxdWU8VGVzdD4oUykpOwogICAgICAgIHJldHVybiAqKF9saXN0LmJhY2soKSk7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIFRlc3QgeCgib25lIik7CiAgICB4LmFkZCgidHdvIik7CiAgICBUZXN0JiB5ID0geC5hZGQoInRocmVlIik7CiAgICB5LmFkZCgiZm91ciIpOwoKICAgIGNvdXQgPDwgeS50b19zdHJpbmcoKSA8PCAnXG4nOwogICAgY291dCA8PCB4LnRvX3N0cmluZygpIDw8ICdcbic7Cn0K