static void Main(string[] args)
        {
            int cmdCount = int.Parse(Console.ReadLine());

            var stack = new StackMax <int>();

            int cmdCounter = 0;

            while (cmdCounter != cmdCount)
            {
                var cmd = Console.ReadLine();
                switch (cmd)
                {
                case "max":
                    Console.WriteLine(stack.Max());
                    break;

                case "pop":
                    stack.Pop();
                    break;

                default:
                    string[] push = cmd.Split(' ');
                    stack.Push(int.Parse(push[1]));
                    break;
                }
                cmdCounter++;
            }
            Console.ReadKey();
        }
        public static int[] TestAdapter(string[] input)
        {
            int cmdCount = int.Parse(input[0]);

            var        stack  = new StackMax <int>();
            List <int> Result = new List <int>();

            int cmdCounter = 0;

            while (cmdCounter != cmdCount)
            {
                var cmd = input[cmdCounter + 1];
                switch (cmd)
                {
                case "max":
                    Result.Add(stack.Max());
                    break;

                case "pop":
                    stack.Pop();
                    break;

                default:
                    string[] push = cmd.Split(' ');
                    stack.Push(int.Parse(push[1]));
                    break;
                }
                cmdCounter++;
            }
            return(Result.ToArray());
        }
        public void GetMax_PassEmptyStack_ThrowsException()
        {
            Exception exception = null;

            try
            {
                Stack s = new Stack();
                Assert.AreEqual(1, StackMax.GetMax(s));
            }
            catch (Exception ex)
            {
                exception = ex;
            }
            Assert.IsNotNull(exception);
        }
        public void GetMax_PassOneElement_Returns1()
        {
            Stack s = new Stack(new[] { 1 });

            Assert.AreEqual(1, StackMax.GetMax(s));
        }
        public void GetMax_PassStack202Max_Returns202()
        {
            Stack s = new Stack(new[] { 1, 32, 3, 4, 202, 29 });

            Assert.AreEqual(202, StackMax.GetMax(s));
        }