# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = []
    
    def push(self, node):
        # write code here
        if not self.stack:
            self.stack.append((node,node))
        else:
            min_val = self.stack[-1][1]
            self.stack.append((node,min(node,min_val)))
            
    def pop(self):
        # write code here
        return self.stack.pop()
        
    def top(self):
        # write code here
        return self.stack[-1][0]
    
    def min(self):
        # write code here
        return self.stack[-1][1]