import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param op string字符串一维数组
     * @param vals int整型二维数组
     * @return int整型一维数组
     */
    class MaxCowStack {
        ArrayDeque<Integer> stk1 = new ArrayDeque<>();
        public void pop() {
            stk1.pollFirst();
            stk1.pollLast();
        }
        public int top() {
            return stk1.peekFirst();
        }
        public int getMax() {
            return stk1.peekLast();
        }
        public void push(int val) {
            stk1.offerFirst(val);
            if (stk1.peekLast() <= val) {
                stk1.offerLast(val);
            } else {
                stk1.offerLast(stk1.peekLast());
            }
        }

    }
    public int[] max_weight_cow (String[] op, int[][] vals) {
        // write code here
        int len = op.length;

        int[] values = new int[len];
        MaxCowStack maxCow = new MaxCowStack();
        for (int i = 0; i < len; ++i) {
            switch (op[i]) {
                case "MaxCowStack":
                    values[i] = -1;
                    break;
                case "push":
                    maxCow.push(vals[i][1]);
                    values[i] = -1;
                    break;
                case "getMax":
                    values[i] = maxCow.getMax();
                    break;
                case "pop":
                    maxCow.pop();
                    values[i] = -1;
                    break;
                case "top":
                    values[i] = maxCow.top();
                    break;

            }
        }
        return values;
    }
}