import algds.IOUtils;
/**
 * AlgDs, WS99, Aufgabe 21.
 * Palindrome
 *
 * @author Christian Semrau, 29.11.1999, 25.12.1999
 * <a href="mailto:Christian.Semrau@student.uni-magdeburg.de">
 * Christian.Semrau@student.uni-magdeburg.de</a>
 */
class ChS_Aufg21{

/**
 * Liefert einen String, der nur die Buchstaben (klein) von s enthaelt.
 */
public static String filter(String s) {
  String chars =
  // enthaelt alle Zeichen, die der Filter "durchlassen" soll
	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"abcdefghijklmnopqrstuvwxyz";
  String f = "";
  char c;
  for (int i = 0; i < s.length(); )
	if (chars.indexOf(c=s.charAt(i++))>=0)
	  f += c;
  return f.toLowerCase();
}

public static void main(String[] args){
  String s;
  do{
	System.out.println("Ein Palindrom bitte (oder auch nicht):");
	s = IOUtils.readString();  // String einlesen
	if (s.length() == 0) break;  // leere Eingabe beendet

	// Teil a)
	System.out.println(reverse(s));  // rueckwaerts ausgeben
	if (palindromic2(s))
 	  System.out.println(" Ist ein exaktes Palindrom.");
	else {
	  // Teil b)
	  System.out.println(filter(s));  // gefiltert ausgeben
	  if (palindromic2(filter(s)))
	    System.out.println(" Ist gefiltert ein Palindrom.");
	  else
		System.out.println(" Ist kein Palindrom.");
	}
  }while (true);
} // main()

/**
 * Liefert true, wenn s ein (exaktes) Palindrom ist, false wenn nicht.
 * Kehrt den String um und vergleicht die beiden direkt miteinander.
 */
public static boolean palindromic(String s) {
  return s.equals(reverse(s));
}

/**
 * Liefert true, wenn s ein (exaktes) Palindrom ist, false wenn nicht.
 * Vergleicht das erste Zeichen mit dem letzten, das zweite mit dem
 * vorletzten, usw bis zur Mitte.
 */
public static boolean palindromic2(String s) {
  for (int li=0, re=s.length()-1; li<re; li++, re--)
	if (s.charAt(li) != s.charAt(re))
	  return false;
  return true;
}
/**
 * Meine eigene String-reverse-Methode.
 */
public static String reverse(String s) {
  String a = "";
  for (int i = s.length()-1; i >= 0; i--)
	a += s.charAt(i);
  return a;
}
} // class ChS_Aufg21