#include <iostream>
using namespace std;
#ifndef HELLO_WORLD_STACK_H
#define HELLO_WORLD_STACK_H
class stack {
private:
class elem {
public:
const int value;
elem* next;
elem(const int, elem*);
};
elem* topElem = nullptr;
public:
~stack();
void push(const int);
void pop();
const int top();
};
#endif //HELLO_WORLD_STACK_H
stack::elem::elem(const int v, elem* n): value(v), next(n) {}
stack::~stack() {
elem* currentElem = topElem;
while (currentElem->next != nullptr) {
elem *toDelete = currentElem;
currentElem = currentElem->next;
delete toDelete;
}
delete currentElem;
}
void stack::push(const int i) {
topElem = new elem(i, topElem);
}
void stack::pop() {
if (topElem != nullptr) {
elem* toDelete = topElem;
topElem = topElem->next;
delete toDelete;
} else {throw "empty stack";}
}
const int stack::top() {
if (topElem != nullptr) {
return topElem->value;
}
throw "empty stack";
}
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2lmbmRlZiBIRUxMT19XT1JMRF9TVEFDS19ICiNkZWZpbmUgSEVMTE9fV09STERfU1RBQ0tfSAoKCmNsYXNzIHN0YWNrIHsKCnByaXZhdGU6CgogICAgY2xhc3MgZWxlbSB7CiAgICBwdWJsaWM6CiAgICAgICAgY29uc3QgaW50IHZhbHVlOwogICAgICAgIGVsZW0qIG5leHQ7CgogICAgICAgIGVsZW0oY29uc3QgaW50LCBlbGVtKik7CiAgICB9OwoKICAgIGVsZW0qIHRvcEVsZW0gPSBudWxscHRyOwoKcHVibGljOgogICAgfnN0YWNrKCk7CiAgICB2b2lkIHB1c2goY29uc3QgaW50KTsKICAgIHZvaWQgcG9wKCk7CiAgICBjb25zdCBpbnQgdG9wKCk7Cgp9OwoKCiNlbmRpZiAvL0hFTExPX1dPUkxEX1NUQUNLX0gKCnN0YWNrOjplbGVtOjplbGVtKGNvbnN0IGludCB2LCBlbGVtKiBuKTogdmFsdWUodiksIG5leHQobikge30KCnN0YWNrOjp+c3RhY2soKSB7CiAgICBlbGVtKiBjdXJyZW50RWxlbSA9IHRvcEVsZW07CgogICAgd2hpbGUgKGN1cnJlbnRFbGVtLT5uZXh0ICE9IG51bGxwdHIpIHsKICAgICAgICBlbGVtICp0b0RlbGV0ZSA9IGN1cnJlbnRFbGVtOwogICAgICAgIGN1cnJlbnRFbGVtID0gY3VycmVudEVsZW0tPm5leHQ7CiAgICAgICAgZGVsZXRlIHRvRGVsZXRlOwogICAgfQoKICAgIGRlbGV0ZSBjdXJyZW50RWxlbTsKfQoKdm9pZCBzdGFjazo6cHVzaChjb25zdCBpbnQgaSkgewogICAgdG9wRWxlbSA9IG5ldyBlbGVtKGksIHRvcEVsZW0pOwp9Cgp2b2lkIHN0YWNrOjpwb3AoKSB7CiAgICBpZiAodG9wRWxlbSAhPSBudWxscHRyKSB7CiAgICAgICAgZWxlbSogdG9EZWxldGUgPSB0b3BFbGVtOwogICAgICAgIHRvcEVsZW0gPSB0b3BFbGVtLT5uZXh0OwogICAgICAgIGRlbGV0ZSB0b0RlbGV0ZTsKICAgIH0gZWxzZSB7dGhyb3cgImVtcHR5IHN0YWNrIjt9Cn0KCmNvbnN0IGludCBzdGFjazo6dG9wKCkgewogICAgaWYgKHRvcEVsZW0gIT0gbnVsbHB0cikgewogICAgICAgIHJldHVybiB0b3BFbGVtLT52YWx1ZTsKICAgIH0KICAgIHRocm93ICJlbXB0eSBzdGFjayI7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=