#include <iostream>
#include <memory>
using namespace std;
template <typename T>
class StackNode{
public:
T data_{};
std::unique_ptr<StackNode<T>> next_;
explicit StackNode(const T& data_) : data_(data_),next_(nullptr) {}
};
template <typename T>
class Stack{
private:
std::unique_ptr<StackNode<T>> top_;
std::size_t size_{};
public:
Stack() : top_(nullptr), size_ (0){}
void push(const T& item){
std::unique_ptr<StackNode<T>> p = std::make_unique<StackNode<T>>(item);
p->next_ = std::move(top_);
top_ = std::move(p);
}
T pop(){
T p = top_->data_;
top_ = std::move(top_->next_);
return p;
}
T peek(){
return top_->data_;
}
};
int main() {
Stack<int> stack{};
stack.push(12);
stack.push(13);
std::cout << stack.peek() << std::endl;
stack.pop();
std::cout << stack.peek() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBTdGFja05vZGV7CnB1YmxpYzoKICAgIFQgZGF0YV97fTsKICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja05vZGU8VD4+IG5leHRfOwoKICAgIGV4cGxpY2l0IFN0YWNrTm9kZShjb25zdCBUJiBkYXRhXykgOiBkYXRhXyhkYXRhXyksbmV4dF8obnVsbHB0cikge30KCn07CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBTdGFja3sKcHJpdmF0ZToKCiAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tOb2RlPFQ+PiB0b3BfOwogICAgc3RkOjpzaXplX3Qgc2l6ZV97fTsKCnB1YmxpYzoKICAgIFN0YWNrKCkgOiB0b3BfKG51bGxwdHIpLCBzaXplXyAoMCl7fQogICAgdm9pZCBwdXNoKGNvbnN0IFQmIGl0ZW0pewogICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja05vZGU8VD4+IHAgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0YWNrTm9kZTxUPj4oaXRlbSk7CiAgICAgICAgcC0+bmV4dF8gPSBzdGQ6Om1vdmUodG9wXyk7CiAgICAgICAgdG9wXyA9IHN0ZDo6bW92ZShwKTsKICAgIH0KCiAgICBUIHBvcCgpewogICAgICAgIFQgcCA9IHRvcF8tPmRhdGFfOwogICAgICAgIHRvcF8gPSBzdGQ6Om1vdmUodG9wXy0+bmV4dF8pOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIFQgcGVlaygpewogICAgICAgIHJldHVybiB0b3BfLT5kYXRhXzsKICAgIH0KCn07CgppbnQgbWFpbigpIHsKCQoJU3RhY2s8aW50PiBzdGFja3t9OwoJc3RhY2sucHVzaCgxMik7CglzdGFjay5wdXNoKDEzKTsKCXN0ZDo6Y291dCA8PCBzdGFjay5wZWVrKCkgPDwgc3RkOjplbmRsOwoJc3RhY2sucG9wKCk7CglzdGQ6OmNvdXQgPDwgc3RhY2sucGVlaygpIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=