import java.util.Stack;

class SunStackGleise1
{
  static Stack gleisA = new Stack();
  static Stack gleisB = new Stack();
  static Stack gleisC = new Stack();

  static void startgleisAnlegen()
  { gleisA.push(new Integer(16));
    gleisA.push(new Integer(11));
    gleisA.push(new Integer(15));
    gleisA.push(new Integer(6));
    gleisA.push(new Integer(13));
    gleisA.push(new Integer(7));
    gleisA.push(new Integer(20));
    gleisA.push(new Integer(10));
    gleisA.push(new Integer(19));
    gleisA.push(new Integer(3));
  }

  static void sortiereWaggons()
  { Integer wagen;
    wagen = (Integer)gleisA.pop(); // Ersten Wagen auf alle Faelle
    gleisC.push(wagen);            // von A nach C
    
    while ((!gleisA.empty()) || (!gleisB.empty()))
    { verschiebe (gleisA, gleisB, gleisC); // Gleis A wird geleert
      if (!gleisB.empty())               // Gleis B (Ablage) nicht leer.
           verschiebe (gleisB, gleisA, gleisC);
                                           // Gleis A ist nun Ablage.
    } // while
  } // sortiere Waggons


  static void verschiebe (Stack start, Stack ablage, Stack ziel)
  { // leert start und fuellt u.U. ablage auf
    Integer startwagen;
    Integer zielwagen;
    while (!start.empty())
    {    do
         { startwagen = (Integer)start.peek();
           zielwagen  = (Integer)ziel.peek();
           if (startwagen.intValue() < zielwagen.intValue())
                { zielwagen = (Integer)ziel.pop(); // Waggon vom Ziel
                  ablage.push(zielwagen);        // in Ablage schieben
                }
         } while ((zielwagen.intValue() > startwagen.intValue()) && (!ziel.empty()));
         startwagen = (Integer)start.pop();
         ziel.push(startwagen);
    } // while
  } // verschiebe


  static void kontrolle(Stack gleis)
  { Integer wagen;
    while (!gleis.empty())
    { wagen = (Integer)gleis.pop();
      Out.println("Auf dem Gleis steht Nr. " + wagen.intValue());
    } // while
  } // kontrolle

  public static void main(String[] arg)
  {
    startgleisAnlegen();
    sortiereWaggons();
    kontrolle(gleisC);
    kontrolle(gleisB);
    kontrolle(gleisA);
  } // main
} // class SunStackGleise1
