#include <climits>
class Solution {
public:
    stack<int>q ; 
    stack<int>minn ;  
    void push(int value) 
    {
        q.push(value) ;
        if(minn.empty())
        {
            minn.push(value) ;
            return ; 
        }
        if(value <= minn.top())
        {
            minn.push(value) ;
        }    
    }
    void pop() {
        if(q.top() == minn.top())
        {
            minn.pop() ;
        }     
        q.pop() ;   
    }
    int top() {
        return q.top() ;
    }
    int min() {
        return minn.top() ;
    }
};