Consider an ordinary stack of integers that implements the usual push() and pop() operations in constant time. Describe an algorithm that implements an auxiliary stack alongside the ordinary stack such that the push() and pop() operations occur in constant time, but also keep track of the element currently in the ordinary stack with the minimum value in constant time. That is, design the auxiliary stack with these operations such that a user can push, pop, and findMin any number of times and still perform these operations in constant time.