#include <iostream>
#include <vector>

template <typename T, typename CONT>
class stack {
public:
  auto push(T t) -> void { stack_.push_back(t); }
  auto pop() -> void { stack_.pop_back(); }
  auto top() -> T& { return stack_.back(); }
  auto empty() const -> bool { return stack_.empty(); }
private:
  CONT stack_;
};

auto main(void) -> int {
  stack<int, std::vector<int>> s1;
  int i1 = 1;
  int i2 = 2;
  s1.push(i1);
  s1.push(i2);
  while (!s1.empty()) {
    std::cout << s1.top() << " ";
    s1.pop();
  }
  std::cout << "\n";
} 