#include <iostream>
#include <string.h>
using namespace std;
 
    class String
    {
        char *m_str;
        size_t m_len, m_alloced;
    public:
        String(const char *str = "")
        {
            m_len = strlen(str);
            m_alloced = m_len + 1;
            m_str = (char *)malloc(m_alloced);
            strcpy(m_str, str);
        }
        String(const String &other)
        {
            m_len = other.m_len;
            m_alloced = m_len + 1;
            m_str = (char *)malloc(m_alloced);
            strcpy(m_str, other.m_str);
        }
        String &operator =(const String &rhs)
        {
            if (m_alloced < rhs.m_len + 1)
            {
                m_alloced = rhs.m_len + 1;
                m_str = (char *)realloc(m_str, m_alloced);
            }
 
            m_len = rhs.m_len;
            strcpy(m_str, rhs.m_str);
            return *this;
        }
        const char *get() const
        {
        	return m_str;
        }
    };
 
int main()
{
	String str1 = "asdf";
	String str2 = str1;
	String str3 = "12";
	str3 = str1;
 
	cout << str1.get() << endl << str2.get() << endl << str3.get() << endl;
}
 
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgY2xhc3MgU3RyaW5nCiAgICB7CiAgICAgICAgY2hhciAqbV9zdHI7CiAgICAgICAgc2l6ZV90IG1fbGVuLCBtX2FsbG9jZWQ7CiAgICBwdWJsaWM6CiAgICAgICAgU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciA9ICIiKQogICAgICAgIHsKICAgICAgICAgICAgbV9sZW4gPSBzdHJsZW4oc3RyKTsKICAgICAgICAgICAgbV9hbGxvY2VkID0gbV9sZW4gKyAxOwogICAgICAgICAgICBtX3N0ciA9IChjaGFyICopbWFsbG9jKG1fYWxsb2NlZCk7CiAgICAgICAgICAgIHN0cmNweShtX3N0ciwgc3RyKTsKICAgICAgICB9CiAgICAgICAgU3RyaW5nKGNvbnN0IFN0cmluZyAmb3RoZXIpCiAgICAgICAgewogICAgICAgICAgICBtX2xlbiA9IG90aGVyLm1fbGVuOwogICAgICAgICAgICBtX2FsbG9jZWQgPSBtX2xlbiArIDE7CiAgICAgICAgICAgIG1fc3RyID0gKGNoYXIgKiltYWxsb2MobV9hbGxvY2VkKTsKICAgICAgICAgICAgc3RyY3B5KG1fc3RyLCBvdGhlci5tX3N0cik7CiAgICAgICAgfQogICAgICAgIFN0cmluZyAmb3BlcmF0b3IgPShjb25zdCBTdHJpbmcgJnJocykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChtX2FsbG9jZWQgPCByaHMubV9sZW4gKyAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtX2FsbG9jZWQgPSByaHMubV9sZW4gKyAxOwogICAgICAgICAgICAgICAgbV9zdHIgPSAoY2hhciAqKXJlYWxsb2MobV9zdHIsIG1fYWxsb2NlZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1fbGVuID0gcmhzLm1fbGVuOwogICAgICAgICAgICBzdHJjcHkobV9zdHIsIHJocy5tX3N0cik7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgY29uc3QgY2hhciAqZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgCXJldHVybiBtX3N0cjsKICAgICAgICB9CiAgICB9OwoKaW50IG1haW4oKQp7CglTdHJpbmcgc3RyMSA9ICJhc2RmIjsKCVN0cmluZyBzdHIyID0gc3RyMTsKCVN0cmluZyBzdHIzID0gIjEyIjsKCXN0cjMgPSBzdHIxOwoKCWNvdXQgPDwgc3RyMS5nZXQoKSA8PCBlbmRsIDw8IHN0cjIuZ2V0KCkgPDwgZW5kbCA8PCBzdHIzLmdldCgpIDw8IGVuZGw7Cn0KCg==