#include <stack>
class Solution {
  public:
    void push(int value) {
        st.push(value);
        if (stmin.empty() || value <= stmin.top()) {
            stmin.push(value);
        }
    }
    void pop() {
        int value = st.top();
        st.pop();
        if (!stmin.empty() && value == stmin.top()) {
            stmin.pop();
        }
    }
    int top() {
        return st.top();
    }
    int min() {
        return stmin.top();
    }

  private:
    stack<int> st;
    stack<int> stmin;
};