import java.util.*;

public class Buffer {
  // rappresentazione degli oggetti
  private int capacitares;
  private List lista;

  // metodi pubblici
  public Buffer(int c) {
    capacitares = c;
    lista = new ArrayList();
  }

  public int capacitaResidua() {
    return capacitares;
  }

  public int numDati() {
    return lista.size();
  }

  public void aggiungiDato(String d) {
    if (d.length() > capacitares) throw new RuntimeException("Buffer Pieno");
    else {
      capacitares = capacitares - d.length();
      lista.add(d);
    }
  }

  public String estraiDato(int i) {
    if (i < 0 || i >= numDati()) 
      throw new RuntimeException("Indice fuori dai limiti");
    else {
      String d = (String)lista.remove(i);
      capacitares = capacitares + d.length();
      return  d;
    }
  }
   
  public int contaOccorrenze(String d) {
    int num = 0;
    Iterator it = lista.iterator();
    while (it.hasNext()) {
      String e = (String)it.next();
      if (e.equals(d)) num++;
    }
    return num;
  }

  public int[] qualiPosizioni(String d) {
    int[] ris = new int[contaOccorrenze(d)];
    int i = 0;
    int pos = 0;
    Iterator it = lista.iterator();
    while (it.hasNext()) {
      String e = (String)it.next();
      if (e.equals(d)) {
        ris[i] = pos;
        i++;
      }
      pos++;
    }
    return ris;
  }
}  




































