#include<iostream>
using namespace std;
class shared_ptr
{
public:
int *pointer;
public:
shared_ptr()
{
pointer = new int;
}
~shared_ptr()
{
delete pointer;
}
int operator* ();
int* operator= (shared_ptr&);
};
int shared_ptr:: operator* ()
{
return *(this->pointer);
}
int* shared_ptr:: operator= (shared_ptr& temp)
{
return (temp.pointer);
}
int main()
{
shared_ptr s1, s2;
*(s1.pointer) = 10;
int* k = (s1 = s2);
}
I2luY2x1ZGU8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIHNoYXJlZF9wdHIKewogICAgcHVibGljOgogICAgaW50ICpwb2ludGVyOwogICAgcHVibGljOgogICAgc2hhcmVkX3B0cigpCiAgICB7CiAgICAgICAgcG9pbnRlciA9IG5ldyBpbnQ7CiAgICB9CiAgICB+c2hhcmVkX3B0cigpCiAgICB7CiAgICAgICAgZGVsZXRlIHBvaW50ZXI7CiAgICB9CiAgICBpbnQgb3BlcmF0b3IqICgpOwogICAgaW50KiBvcGVyYXRvcj0gKHNoYXJlZF9wdHImKTsKfTsKCmludCBzaGFyZWRfcHRyOjogb3BlcmF0b3IqICgpCnsKICAgIHJldHVybiAqKHRoaXMtPnBvaW50ZXIpOwp9CgppbnQqIHNoYXJlZF9wdHI6OiBvcGVyYXRvcj0gKHNoYXJlZF9wdHImIHRlbXApCnsKICAgIHJldHVybiAodGVtcC5wb2ludGVyKTsKfQoKaW50IG1haW4oKQp7CiAgICBzaGFyZWRfcHRyIHMxLCBzMjsKICAgICooczEucG9pbnRlcikgPSAxMDsKICAgIGludCogayA9IChzMSA9IHMyKTsKfQ==