import java.util.Vector;

/**
 * A Stack (of Object objects)
 *
 * This implementation uses contiguous memory
 *
 * @version 1.0
 * @author  Prof. David Bernstein, James Madison University
 */
    public class Stack
   {
      private int         top;
     // private Object[]    contents;
      private Vector <Integer>    contents;
   
      //public static final int CAPACITY = 100;
   
    /**
     * Construct a new (empty) Stack
     */
       public Stack()
      {
         top = -1;
         //contents = new Object[CAPACITY];
         contents = new Vector<Integer>();
      }
   
    /**
     * Pop an Object off of the top of this Stack
     *
     * @return  The Object on the top of this Stack
     */
       public Object pop()
      {
         Object  value;
         
      
         if (top != -1) 
         {
            //value = contents[top];
              value = contents.elementAt(top);
            top   = top - 1;
         } 
         else
         {
            value = null;
         }
      
         return value;
      }
   
   
    /**
     * Push an Object onto the top of this Stack
     *
     * @param first   The Object to push
     */
       public void push(Object first)
      {
         //if (top < CAPACITY-1)
         //{
            top = top + 1;
         
            //contents[top] = first;
            contents.add((Integer)first);
         //}
      }
   }
