class Person
{ int nr;
  Person naechste;
  Person (int nummer, Person weiter) // Konstruktor
  { this.nr       = nummer;
    this.naechste = weiter;
  }
} // Person

class Josephus
{ static int anzahl, schrittweite;
  static Person anker;

  static void ringAufbauen(int n)
  { Person lauf;
    anker = new Person(1, null);
    anker.naechste = anker; // Erste Person anlegen, naechste ist sie selbst.
    for (int i = n; i>=2; i--)
    { lauf = new Person(i, anker.naechste);
      anker.naechste = lauf;
      Out.println("Person mit Nr. " + i + " wird eingefuegt.");
    } // for
  } // ringAufbauen

  static void kontrolle(int n)
  { Person lauf = anker;
    for (int i = 1; i<=n; i++)
    { Out.println("lauf ist auf Nr. " + lauf.nr);
      lauf = lauf.naechste;
    } // for
  } // kontrolle

  static void aussondern(int step)
  { Person lauf = new Person(0, anker); // nr unwichtig
    while (lauf != lauf.naechste)
    { for (int i = 1; i <= step-1; i++) // bis vor den zu Steichenden gehen
        lauf = lauf.naechste;
      Out.println ("Gestrichen wird " + lauf.naechste.nr + ".");
      lauf.naechste = lauf.naechste.naechste;
    } // while
    Out.println("Stehengeblieben ist Nr. " + lauf.nr + ".");
  } // aussondern

  public static void main(String args[]) // Hauptprogramm
  { Out.println("Josephus-Problem");
    Out.print("Geben Sie Anzahl der beteiligten Personen an : ");
    anzahl = In.readInt();
    Out.print("Geben Sie die Schrittweite zum Aussondern an : ");
    schrittweite = In.readInt();
    Out.println("Ring wird aufgebaut.");
    ringAufbauen(anzahl);
    Out.println("Ring ist aufgebaut.");
    // kontrolle(anzahl+1); // Ring durchlaufen
    aussondern(schrittweite);
  } // Ende von main
} // Ende von class Josephus
