public class PilaA {
  //costante ausiliaria
  private static final int DIM = 10;

  //rappresentazione degli oggetti
  private String[] array;
  private int numElem;
  
  public PilaA(){
    array = new String[DIM];
    numElem = 0;
  }
  
  public boolean estVuota(){
    return numElem == 0;
  }
  
  public void push(String s){
    if (numElem == array.length) {//la pila e' piena
      // sostituisce l'array corrente con uno piu' grande 
      String[] aux = new String[array.length*2];
      for (int i=0; i<numElem; i++)
        aux[i]=array[i];
      array = aux;
    }
    array[numElem]= s;
    numElem ++;
  } 
  
  public void pop() {
    if(numElem == 0)
      throw new RuntimeException("pila vuota!");
    else {
      array[numElem-1] = null; // rislasciamo l'ultima stringa
      numElem --;
      
      //se l'array e' troppo vuota sostituiscilo con uno piu' piccolo
      if (array.length > DIM && numElem < array.length/4) {
        String[] aux = new String[array.length/2];
      for (int i=0; i<numElem; i++)
        aux[i]=array[i];
      array = aux;
      }
    }
  }
  
  public String top() {
    if(numElem == 0)
      throw new RuntimeException("pila vuota!");
    else return array[numElem-1];
  }
  
  public String toString(){
    String ris="";
    for (int i=numElem-1; i>=0; i--) //stampo prima l'ultima stringa inserita
      ris = ris + array[i] + "\n";
    return ris;
  }
}
