// Stephan Bazalka
// EProg Runde 3, BspNr. 3126
// Matrikelnummer: 0225725
// eMail: bazalka@gmx.net

// WICHTIGE ANMERKUNG
// ------------------
// Lt. Spezifikation der Teillösung, die ich bekommen
// habe (Wochentag.java), wird jedes Datum als 19JJ
// interpretiert! Daher liefert die Eingabe des heutigen
// Datums einen "falschen" Wochentag!
// Das ist aber Absicht im Sinne der Spezifikation der
// Teillösung.
// (Ich fürchte nur, sie wird nicht mitgeliefert, deswegen
// schreib ichs überall hin!


import eprog.*;

public class Anzeige extends EprogIO {

// Array zur Speicherung von Trennzeichen-Position

static int[] trennPos = new int[4];

    public static void main(String[] args) throws EprogException
    {

	String eingabe = einlesen();

	// untersuchen() liefert true, wenn Trennzeichen gefunden wurden
	// und false, wenn die Eingabe nur aus Zahlen besteht und die Länge 10 hat.

		if (untersuchen(eingabe)) {
		ausgeben(mitTrennzeichenBerechnen(eingabe));
		} else {
		ausgeben(ohneTrennzeichenBerechnen(eingabe));
		}

    }


public static String einlesen()
  {
	String eingabe = new String();
	eingabe = readWord();
	return eingabe;
  }


public static boolean untersuchen(String eingabe)
  {

	boolean trennIdent = false;
	boolean allesZahlen = true;
	int i = 0;
	int anzahlTrenn = 0;

	// Durchläuft die gesamte Eingabe und überprüft für jedes Zeichen:
	// Ob es (bzw. sein Unicode) zwischen a und b bzw. A und B liegt (Buchstaben sind nicht erlaubt!)
	// Ob es zwischen 0 und 9 liegt (dann sinds lauter Zahlen)

    	while( i<eingabe.length() )
	{
		if ((eingabe.charAt(i) > 'a' && eingabe.charAt(i) < 'z') || (eingabe.charAt(i) > 'A' && eingabe.charAt(i) < 'Z'))
		{
		ausgeben("FALSCHE EINGABE");
		} else if (eingabe.charAt(i) > '9' || eingabe.charAt(i) < '0' ) {
		trennPos[anzahlTrenn++] = i;
		allesZahlen = false;
		}
	i++;	
	}


	// Überprüft, ob alle Trennzeichen ident sind.

	if ((eingabe.charAt(trennPos[0]) == eingabe.charAt(trennPos[1])
	  && eingabe.charAt(trennPos[1]) == eingabe.charAt(trennPos[2])
	  && eingabe.charAt(trennPos[2]) == eingabe.charAt(trennPos[3]))) { trennIdent = true; }

	// Wenn die Eingabe nur als Zahlen besteht und die Länge 10 hat (TTMMJJHHMM)
	// dann wird falsch (also kein Trennzeichen vorhanden) zurückgegeben.
	// Wenn es genau vier idente Trennzeichen gibt, wird true retourniert.
	// Wenn nichts davon zutrifft, muss die Eingabe falsch sein!

	if (allesZahlen == true && eingabe.length() == 10)
		{ return false; }

	else if (anzahlTrenn == 4 && trennIdent == true)
		{ return true; }

	else
		{ ausgeben("FALSCHE EINGABE"); return false; }

  }


public static int[] ohneTrennzeichenBerechnen(String eingabe)
  {

	boolean Fehler = false;

	int laenge = 0;
	int[] daten = new int[5];

	laenge = eingabe.length();

	// Teil die Eingabe in "2er-Stückerl" auf.
	// daten[] enthält dann die int-Werte der Eingabe.

	try {
	daten[0] = Integer.parseInt(eingabe.substring(0,2));
	daten[1] = Integer.parseInt(eingabe.substring(2,4));
	daten[2] = Integer.parseInt(eingabe.substring(4,6));
	daten[3] = Integer.parseInt(eingabe.substring(6,8));
	daten[4] = Integer.parseInt(eingabe.substring(8,10));
	}

	catch (NumberFormatException e) {
	ausgeben("FALSCHE EINGABE"); ;
	}

	catch (StringIndexOutOfBoundsException e) {
	ausgeben("FALSCHE EINGABE"); ;
	}

	return daten;

  }


public static int[] mitTrennzeichenBerechnen(String eingabe)
  {

	int laenge = 0;
	int[] daten = new int[5];

	laenge = eingabe.length();

	int i = 0;

	// Ein Eingabestückerl darf nicht länger als zwei Zeichen sein.

	if ((eingabe.substring(0,trennPos[0]).length() > 2) ||
	     (eingabe.substring(trennPos[0]+1, trennPos[1]).length() > 2) ||
	     (eingabe.substring(trennPos[1]+1, trennPos[2]).length() > 2) ||
	     (eingabe.substring(trennPos[2]+1, trennPos[3]).length() > 2) )
	{
	ausgeben("FALSCHE EINGABE");
	}

	// Zerstückelt die Eingabe. Jeweils zwischen zwei Trennzeichen stehen
	// die Daten.

	try {
	daten[0] = Integer.parseInt(eingabe.substring(0,trennPos[0]));
	daten[1] = Integer.parseInt(eingabe.substring(trennPos[0]+1, trennPos[1]));
	daten[2] = Integer.parseInt(eingabe.substring(trennPos[1]+1,trennPos[2]));
	daten[3] = Integer.parseInt(eingabe.substring(trennPos[2]+1,trennPos[3]));
	daten[4] = Integer.parseInt(eingabe.substring(trennPos[3]+1,laenge));
	}

	catch (NumberFormatException e) {
	ausgeben("FALSCHE EINGABE"); ;
	}

	catch (StringIndexOutOfBoundsException e) {
	ausgeben("FALSCHE EINGABE"); ;
	}

	return daten;

  }


public static void ausgeben(String raus)
  {

	// Steuert die Ausgabe.
	// Wenn "FALSCHE AUSGABE" ausgegeben werden soll,
	// wird das Programm beendet.
	// So will ich viele verstreute System.exit(0) im Quelltext verhindern.

	println(raus);
		if (raus.equals("FALSCHE EINGABE")) { System.exit(0); }

  }


public static void ausgeben(int[] daten)
  {

	String[] felder = new String[10];
	String ergebnis = new String();

	// Das sind die Zahlenkolonnen
	// Zum Testen des Programms empfiehlt es sich, in Klammer einfach
	// die Ziffer, die die Zahlenkollone darstellt, hinzuschreiben.
	// Also felder[0] = "123456 (0)";

	felder[0] = "123456";
	felder[1] = "23";
	felder[2] = "12457";
	felder[3] = "12347";
	felder[4] = "2367";
	felder[5] = "13467";
	felder[6] = "134567";
	felder[7] = "1236";
	felder[8] = "1234567";
	felder[9] = "123467";


	// Sind die Daten im Bereich des möglichen?

	if (daten[3] > 23 || daten[4] > 59) { ausgeben("FALSCHE EINGABE"); }


	// Ruft eine andere Klasse zur Berechnung des Wochentags auf

	String datum = new String(Wochentag.berechneTag(daten[0], daten[1], daten[2]));

	// Wenn das Datum ungültig ist, wird abgebrochen

	if (datum.equals("FALSCHE EINGABE")) { ausgeben("FALSCHE EINGABE"); }

	// Berechnet restlichen vier Stellen der Ausgabe (die ersten 2 sind das Datum)
	// Um sicherzustellen, dass es wirklich 4 Stellen sind, werden zuerst die Minuten bzw. Stunden
	// durch 10 dividiert (und alle nach dem Komma abgeschnitten.
	// Ist der Wert kleiner als 10 kommt also 0 heraus.
	// Anschließend wird noch eine Modulodivision durchgeführt.
	// Bsp: Minuten = 7 (entspricht daten[3])
	// Die ganzzahle Division durch 10 liefert 0.
	// Die Mod.division 7 % 10 liefert 7. Aus 7 wurde folglich aufwändige if-Schleifen 07.

	ergebnis = datum + " " + felder[(int)Math.floor(daten[3]/10)] + " " + felder[daten[3]%10] + " " + felder[(int)Math.floor(daten[4]/10)] + " " + felder[daten[4]%10];

 	println(ergebnis);

  }

}