A stack is a first-in-last-out data structure where we always remove the item which has most recently been added to the stack, this is comparable to a pile of books. You place books on top and remove from the top. Consider the operations on a stack: push - adds an element to the top of the stack pop - removes the element from the top of the stack top - returns the value of the element at the top of the stack without actually removing it empty - returns true if the stack is empty and false otherwise Reference: page 744 of Savitch for more on stacks. Study the class below and answer the questions that follow: class Stack { public: Stack(); bool empty() const; int top() const; int pop(); void push(int element); private: vector pool; }; //constructor Stack::Stack(){ pool.reserve(10); //reserve member function such as vector reserve } (a) Write code for a template version of the Stack class. (b) Use the following main()function to test your Stack class. int main() { Stack dStack; Stack sStack; cout<<"Pushing 3.4, 5.5, 2.2, 6.7 -> on to dStack"< on to sStack"<