# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []  # 用于存储最小值
    
    def push(self, node):
        # write code here
        self.stack1.append(node)
        
        # 如果stack2为空或当前node小于等于stack2的栈顶
        if len(self.stack2) == 0 or node <= self.stack2[-1]:
            self.stack2.append(node)
    
    def pop(self):
        # write code here
        if len(self.stack1) == 0:
            return None
        
        popped_value = self.stack1.pop()
        
        # 如果弹出的元素是最小值,也从stack2中弹出
        if popped_value == self.stack2[-1]:
            self.stack2.pop()
        
        return popped_value
    
    def top(self):
        # write code here
        if len(self.stack1) == 0:
            return None
        return self.stack1[-1]
    
    def min(self):
        # write code here
        if len(self.stack2) == 0:
            return None
        return self.stack2[-1]  # 栈顶元素始终是当前最小值