class Solution {
  public:
    void push(int value) {
        s_data.push(value);
        if (s_help.empty() || value < s_help.top()) {
            s_help.push(value);
        } else {
            s_help.push(s_help.top());
        }
    }

    void pop() {
        s_data.pop();
        s_help.pop();
    }

    int top() {
        return s_data.top();
    }

    int min() {
        return s_help.top();
    }
  private:
    stack<int> s_data;
    stack<int> s_help;
};