import java.util.Iterator;
public class Test
{
   public static void main(String[] pArgs)
   {
      LimitedMemory<Name> tLimitedMemory = new LimitedMemory<Name>();
      tLimitedMemory.add(new Name("jim"));
      tLimitedMemory.add(new Name("bert"));
      tLimitedMemory.add(new Name("jill"));
      tLimitedMemory.add(new Name("jane"));
      tLimitedMemory.add(new Name("tom"));
      tLimitedMemory.add(new Name("dick"));
      tLimitedMemory.add(new Name("harry"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("fred"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("carol"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("mick"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("kylie"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("kirsty"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("kate"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("paul"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("john"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("george"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("alison"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("karen"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("jackie"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("paula"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("douglas"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      tLimitedMemory.add(new Name("christine"));
      iMyPrintln(tLimitedMemory);
      System.out.println(" " + tLimitedMemory.value());
      LimitedMemory<Name> tLimitedMemory2 = new LimitedMemory<Name>();
      tLimitedMemory2.add(new Name("jim"));
      tLimitedMemory2.add(new Name("bert"));
      tLimitedMemory2.add(new Name("jill"));
      System.out.println(iBiggestCost(tLimitedMemory, tLimitedMemory2));
   }
   private static void iMyPrintln(LimitedMemory<Name> pLimitedMemory)
   {
      System.out.print("+");
      for (Name tName : pLimitedMemory)
      {
         System.out.print(tName + "+");
      }
      System.out.println();
   }
   private static 
      <GType1 extends Valuable, GType2 extends Valuable> 
         int iBiggestCost(
            LimitedMemory<GType1> pLimitedMemory1,
            LimitedMemory<GType2> pLimitedMemory2)
   {
      return Math.max(pLimitedMemory1.value(), pLimitedMemory2.value());
   }
}
