class Stamp {
  public String capo;
  public boolean libera;
}

public class Guardaroba {
  // rappresentazione degli oggetti
  private Stamp[] array;
  
  // metodo pubblici
  public Guardaroba(int n) {
    array = new Stamp[n];
    for (int i = 0; i < array.length; i++) {
      array[i] = new Stamp();
      array[i].capo = null;
      array[i].libera = true;  
    }
  }

  public int numStampelle() {
    return array.length;
  }

  public int assegnaStampella(String c) {
    for (int i = 0; i < array.length; i++) 
      if (array[i].libera) {
        array[i].capo = c;
        array[i].libera = false;
        return i;
      }
    throw new RuntimeException("Stampelle tutte occupate");
  }

  public void liberaStampella(int n) {
    array[n].capo = null;
    array[n].libera = true;
  }

  public String dammiCapo(int n) {
    return array[n].capo;
  }

  public int cercaCapo(String c) {
    for (int i = 0; i < array.length; i++) 
      if (array[i].capo != null && array[i].capo.equals(c)) 
        return i;
    return -1;
  }

  public int numStampelleOccupate() {
    int cont = 0;
    for (int i = 0; i < array.length; i++) 
      if (!array[i].libera)
        cont++;
    return cont;
  }

  public void aggiungiStampelle(int n) {
    Stamp[] aux = new Stamp[array.length+n];
    for (int i = 0; i < array.length; i++)
      aux[i] = array[i];
    for (int i = array.length; i < array.length+n; i++) {
      aux[i] = new Stamp();
      aux[i].capo = null;
      aux[i].libera = true;
    }
    array = aux;
  }

  public void riordina() {
    Stamp[] aux = new Stamp[numStampelleOccupate()];
    int j = 0;
    for (int i = 0; i < array.length; i++)
      if (!array[i].libera) {
        aux[j] = array[i];
        j++;
      }
    array = aux;
  }
}
    
