class Solution {
public:
    void push(int value) {
        m=::min(m,value);
        auto*k=new TreeNode(value);
        k->right=st;
        st=k;
    }
    void pop() {
        if(m==st->val){
            auto *k=st->right;
            m=k->val;
            while(k!=nullptr)m=::min(m,k->val),k=k->right;
        }
        st=st->right;
    }
    int top() {
        return st->val;
    }
    int min() {
        return m;
    }
private:
int m=0x3f;
TreeNode*st;
};