- #include <iostream> 
- using namespace std; 
-   
- template <typename T> 
- class Stack 
- { 
-     struct Unit 
-     { 
-         Unit *prev; 
-         T value; 
-         Unit(T value); 
-     }; 
- public: 
-     Stack(); 
-     void Push(T value); 
-     int Count(); 
-     T Top(); 
-     T Pop(); 
-     ~Stack(); 
- private: 
-     unsigned int count; 
-     Unit *top; 
-   
- }; 
-   
- template<typename T> 
- Stack<T>::Unit::Unit(T value) 
- { 
-     this->value = value; 
-     prev = nullptr; 
- } 
-   
- template<typename T> 
- Stack<T>::Stack() 
- { 
-     top = nullptr; 
-     count = 0; 
-   
-     std::cout << "The size of each unit is "  << sizeof(Unit) << " bytes." << std::endl; 
- } 
-   
- template<typename T> 
- void Stack<T>::Push(T value) 
- { 
-     if (top == nullptr) 
-     { 
-         top = new Unit(value); 
-     } 
-     else 
-     { 
-         Unit *tmp = new Unit(value); 
-         tmp->prev = top; 
-         top = tmp; 
-     } 
-     count++; 
- } 
-   
- template<typename T> 
- T Stack<T>::Pop() 
- { 
-     T value = top->value; 
-     Unit *tmp = top->prev; 
-     delete top; 
-     top = tmp; 
-     count--; 
-     return value; 
- } 
-   
- template<typename T> 
- Stack<T>::~Stack() 
- { 
-     Unit *curr = top; 
-     if (!curr) 
-     { 
-         return; 
-     } 
-     while (curr) 
-     { 
-         Unit* tmp = curr->prev; 
-         delete curr; 
-         curr = tmp; 
-     } 
- } 
-   
-   
- int main() { 
- 	// your code goes here 
-   
- 	Stack<int> myStack; 
-   
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFN0YWNrCnsKICAgIHN0cnVjdCBVbml0CiAgICB7CiAgICAgICAgVW5pdCAqcHJldjsKICAgICAgICBUIHZhbHVlOwogICAgICAgIFVuaXQoVCB2YWx1ZSk7CiAgICB9OwpwdWJsaWM6CiAgICBTdGFjaygpOwogICAgdm9pZCBQdXNoKFQgdmFsdWUpOwogICAgaW50IENvdW50KCk7CiAgICBUIFRvcCgpOwogICAgVCBQb3AoKTsKICAgIH5TdGFjaygpOwpwcml2YXRlOgogICAgdW5zaWduZWQgaW50IGNvdW50OwogICAgVW5pdCAqdG9wOwoKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClN0YWNrPFQ+OjpVbml0OjpVbml0KFQgdmFsdWUpCnsKICAgIHRoaXMtPnZhbHVlID0gdmFsdWU7CiAgICBwcmV2ID0gbnVsbHB0cjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KU3RhY2s8VD46OlN0YWNrKCkKewogICAgdG9wID0gbnVsbHB0cjsKICAgIGNvdW50ID0gMDsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJUaGUgc2l6ZSBvZiBlYWNoIHVuaXQgaXMgIiAgPDwgc2l6ZW9mKFVuaXQpIDw8ICIgYnl0ZXMuIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgU3RhY2s8VD46OlB1c2goVCB2YWx1ZSkKewogICAgaWYgKHRvcCA9PSBudWxscHRyKQogICAgewogICAgICAgIHRvcCA9IG5ldyBVbml0KHZhbHVlKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBVbml0ICp0bXAgPSBuZXcgVW5pdCh2YWx1ZSk7CiAgICAgICAgdG1wLT5wcmV2ID0gdG9wOwogICAgICAgIHRvcCA9IHRtcDsKICAgIH0KICAgIGNvdW50Kys7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgU3RhY2s8VD46OlBvcCgpCnsKICAgIFQgdmFsdWUgPSB0b3AtPnZhbHVlOwogICAgVW5pdCAqdG1wID0gdG9wLT5wcmV2OwogICAgZGVsZXRlIHRvcDsKICAgIHRvcCA9IHRtcDsKICAgIGNvdW50LS07CiAgICByZXR1cm4gdmFsdWU7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClN0YWNrPFQ+Ojp+U3RhY2soKQp7CiAgICBVbml0ICpjdXJyID0gdG9wOwogICAgaWYgKCFjdXJyKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHdoaWxlIChjdXJyKQogICAgewogICAgICAgIFVuaXQqIHRtcCA9IGN1cnItPnByZXY7CiAgICAgICAgZGVsZXRlIGN1cnI7CiAgICAgICAgY3VyciA9IHRtcDsKICAgIH0KfQoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglTdGFjazxpbnQ+IG15U3RhY2s7CgkKCQoJcmV0dXJuIDA7Cn0=