import java.util.*;


public class Solution {
    public Deque<Integer> stack = new ArrayDeque<>(),min_set = new ArrayDeque<>();
    //public int min = (int)1e9;
    //public int cur = 0;
    public void push(int node) {
        stack.push(node);
        if(!min_set.isEmpty()){
            if(min_set.peek()<node){
                min_set.push(min_set.peek());
            }else{
                min_set.push(node);
            }
        }else{
            min_set.push(node);
        }
    }
    
    public void pop() {
        stack.pop();
        min_set.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        // Deque<Integer> stack1 = new ArrayDeque<>(stack);
        // while(!stack1.isEmpty()){
        //     if(stack1.peek()<min){
        //         min = stack1.pop();
        //         continue;
        //     }
        //     stack1.pop();
        // }
        return min_set.peek();//也是被我想出来了,最小值只与当前已添加元素的最小值有关
    }
}