#include <stack>
using namespace std;
#ifndef _SI221STACK_
#define _SI221STACK_

/***************************************************
 * This is a nice definition of a class stack that
 * matches the abstract data type for stack given
 * in "Data Structures and Other Objects Using C++".
 ***************************************************/
template<class DataType>
class Stack
{
public:

  Stack();
  ~Stack();
  bool isEmpty() const;
  int size() const;
  void push(const DataType &newItem);
  void pop();
  DataType getTop() const;

private:
  Stack(const Stack &S) { }
  Stack& operator=(const Stack &S) { }
  stack<DataType> *I;
};










/***************************************************
 ** DON'T LOOK BELOW THIS LINE! ********************
 ***************************************************/
template<class T>
Stack<T>::Stack() { I = new stack<T>; }

template<class T>
Stack<T>::~Stack() { delete I; }

template<class T>
bool Stack<T>::isEmpty() const { return I->empty(); }

template<class T>
int Stack<T>::size() const { return I->size(); }

template<class T>
void Stack<T>::push(const T &val) { I->push(val); }

template<class T>
void Stack<T>::pop() { I->pop(); }

template<class T>
T Stack<T>::getTop() const { return I->top(); }

#endif

