import java.io.*;

public class UsaPostoAuto {
  public static int primoPostoLibero(PostoAuto[] p) {
    for (int i = 0; i < p.length; i++)
      if (p[i].libero()) return i;
    return -1;
  }
  
  public static int contaPostiLiberi(PostoAuto[] p) {
    int cont = 0;
    for (int i = 0; i < p.length; i++)
      if (p[i].libero()) cont++;
    return cont;
  }
  
  public static int[] qualiPostiLiberi(PostoAuto[] p) {
    int[] ris = new int[contaPostiLiberi(p)];
    int j = 0;
    for (int i = 0; i < p.length; i++)
      if (p[i].libero()) {
        ris[j] = i;
        j++;
      }
    return ris;
  }
  
  public static void entraAuto(PostoAuto[] p, String a, int o) {
    for (int i = 0; i < p.length; i++)
      if (p[i].libero()) {
        p[i].arrivaAuto(a,o);
        return;
      }
  }
    /*
    public static void entraAuto(PostoAuto[] p, String a, int o) {
         int i = primoPostoLibero(p);
         if (i != -1) 
            p[i].arrivaAuto(a,o);
    }
    */
   
  public static void esceAuto(PostoAuto[] p, String a) {
    for (int i = 0; i < p.length; i++)
      if (!p[i].libero() && p[i].getAuto().equals(a)) {
        p[i].parteAuto();
        return;
      }
  }
    
    /*
    public static void esceAuto(PostoAuto[] p, String a) {
        for (int i = 0; i < p.length; i++)
            if (p[i].getAuto() != null && p[i].getAuto().equals(a)) {
                p[i].parteAuto();
                return;
            }
    }
    */
   
  public static int autoPresenteDaPiuTempo(PostoAuto[] p) {
    //assumiamo ore comprese tra 0 e 23
    int ipiutempo = -1;
    int omin = 24;
    for (int i = 0; i < p.length; i++) 
      if (!p[i].libero() && p[i].getOra() < omin) {
        ipiutempo = i;
        omin = p[i].getOra();
      }
    return ipiutempo;
  }
   
  public static String[] tutteLeAutoPresenti(PostoAuto[] p) {
    int cont = 0;
    for (int i = 0; i < p.length; i++) 
      if (!p[i].libero()) cont++;
    String[] ris = new String[cont];
    //String[] ris = new String[p.length - contaPostiLiberi(p)];
    
    int j = 0;
    for (int i = 0; i < p.length; i++)
      if (!p[i].libero()) {
        ris[j] = p[i].getAuto();
                j++;
      }
    return ris;
  }     


  
  
  public static PostoAuto[] leggiParcheggioDaFile(String n) 
                                               throws IOException {
    BufferedReader br;
    
    br = new BufferedReader(new FileReader(n));
    PostoAuto pa = leggiPostoAuto(br);
    int cont = 0;
    while (pa != null) {
      cont++;
      pa = leggiPostoAuto(br);
    }
    br.close();
    
    br = new BufferedReader(new FileReader(n));
    PostoAuto[] ris = new PostoAuto[cont];
    for (int i = 0; i < ris.length; i++) 
      ris[i] = leggiPostoAuto(br);
    br.close();
    
    return ris;
  }
  
  private static PostoAuto leggiPostoAuto(BufferedReader br)
                                               throws IOException {
    String s1 = br.readLine();
    if (s1==null) return null;
    else {
      String s2 = br.readLine();
      String s3 = br.readLine();
      boolean lib = s1.equals("true")? true : false;
      if (lib) return new PostoAuto();
      else {
        PostoAuto pa = new PostoAuto();
        pa.arrivaAuto(s2, Integer.parseInt(s3));
        return pa;
      }
    }
  }
  
  public static void scriviParcheggioSuFile(PostoAuto[] p, String n) 
                                             throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter(n));
    for (int i = 0; i < p.length; i++) {
      if (p[i].libero()) {
        pw.println("true");
        pw.println("");
        pw.println("");
      }  
      else {
        pw.println("false");
        pw.println(p[i].getAuto());
        pw.println(p[i].getOra());  
      }
    }
    pw.close();
  }
}

