#include <memory>
#include <iostream>
#include <string>
using namespace std;
struct Node {
shared_ptr<Node> next;
string value;
~Node() { cout << "destroyed object with value " << value << endl; }
};
int main(){
shared_ptr<Node> a = make_shared<Node>();
shared_ptr<Node> b = make_shared<Node>();
shared_ptr<Node> c = make_shared<Node>();
a->value = "a";
b->value = "b";
c->value = "c";
a->next = b;
b->next = c;
c->next = a;
cout << "Done!\n";
}
I2luY2x1ZGUgPG1lbW9yeT4gCiNpbmNsdWRlIDxpb3N0cmVhbT4gCiNpbmNsdWRlIDxzdHJpbmc+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKc3RydWN0IE5vZGUgeyAKc2hhcmVkX3B0cjxOb2RlPiBuZXh0OyAKc3RyaW5nIHZhbHVlOyAKfk5vZGUoKSB7IGNvdXQgPDwgImRlc3Ryb3llZCBvYmplY3Qgd2l0aCB2YWx1ZSAiIDw8IHZhbHVlIDw8IGVuZGw7IH0gCn07IAppbnQgbWFpbigpeyAKc2hhcmVkX3B0cjxOb2RlPiBhID0gbWFrZV9zaGFyZWQ8Tm9kZT4oKTsgCnNoYXJlZF9wdHI8Tm9kZT4gYiA9IG1ha2Vfc2hhcmVkPE5vZGU+KCk7IApzaGFyZWRfcHRyPE5vZGU+IGMgPSBtYWtlX3NoYXJlZDxOb2RlPigpOyAKYS0+dmFsdWUgPSAiYSI7IApiLT52YWx1ZSA9ICJiIjsgCmMtPnZhbHVlID0gImMiOyAKYS0+bmV4dCA9IGI7ICAKYi0+bmV4dCA9IGM7ICAKYy0+bmV4dCA9IGE7ICAKY291dCA8PCAiRG9uZSFcbiI7IAp9