You need to modify the design of the stack data structure such that it supports ``` push() ``` , ``` pop() ``` , ``` top() ``` and ``` getMin() ``` operations in constant time( ``` O(1) ``` ).

Problem Note:

• ``` top() ``` gets the top element
• ``` getMin() ``` returns the minimum element in the stack
• ``` push(elem) ``` pushes an element ``` elem ``` in the stack
• ``` pop() ``` removes the top element
• It is guaranteed that input is consistent, i.e., only ``` push() ``` will be called if the stack is supposed to be empty
• Kudos if you solve it using constant space!
• The input provided in this case would be a series of function calls to ``` push() ``` , ``` pop() ``` , ``` top() ``` and ``` getMin() ```

Example 1

``````Input:
st = minStack()
st.push(4)
st.push(2)
st.top()      ---> returns 2
st.getMin()   ---> returns 2
st.pop()
st.push(6)
st.getMin()   ---> returns 4``````

Example 2

``````Input:
st = minStack()
st.push(-1)
st.push(5)
st.top()       ---> returns 5
st.push(-4)
st.getMin()    ---> returns -4
st.pop()
st.pop()
st.getMin()    ---> returns -1``````