Min stack: both internal stacks after every operation
=====================================================

push 5    values=[5]            mins=[5]         (new or equal minimum, also pushed on mins)
push 3    values=[3, 5]         mins=[3, 5]      (new or equal minimum, also pushed on mins)
push 7    values=[7, 3, 5]      mins=[3, 5]
push 3    values=[3, 7, 3, 5]   mins=[3, 3, 5]   (new or equal minimum, also pushed on mins)
getMin    values=[3, 7, 3, 5]   mins=[3, 3, 5]   getMin() = 3
pop -> 3  values=[7, 3, 5]      mins=[3, 5]      (it was the minimum, mins popped too)
getMin    values=[7, 3, 5]      mins=[3, 5]      getMin() = 3
pop -> 7  values=[3, 5]         mins=[3, 5]
getMin    values=[3, 5]         mins=[3, 5]      getMin() = 3
pop -> 3  values=[5]            mins=[5]         (it was the minimum, mins popped too)
getMin    values=[5]            mins=[5]         getMin() = 5

getMin results: [3, 3, 3, 5]  (identical for MinStack and EncodedMinStack)
