import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
System.
out.
println(shortestPalindrome
("aacecaaa")); System.
out.
println(shortestPalindrome
("aaacecaa")); System.
out.
println(shortestPalindrome
("abcd")); System.
out.
println(shortestPalindrome
("madamImadam")); System.
out.
println(shortestPalindrome
("madaMimadam")); }
int midpoint = s.length()/2;
// If the string length is odd, we do not need to check the central character
// as it is common to both
return (new StringBuilder(s.substring(0, midpoint)).reverse().toString()
.equals(s.substring(s.length() - midpoint)));
}
int j = s.length();
while (!IsPalindrome(s.substring(0, j))) {
j--;
}
String suffix
= s.
substring(j
); return new StringBuilder(suffix).reverse()
.append(s.substring(0, j))
.append(suffix)
.toString();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKHNob3J0ZXN0UGFsaW5kcm9tZSgiYWFjZWNhYWEiKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKHNob3J0ZXN0UGFsaW5kcm9tZSgiYWFhY2VjYWEiKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKHNob3J0ZXN0UGFsaW5kcm9tZSgiYWJjZCIpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oc2hvcnRlc3RQYWxpbmRyb21lKCJtYWRhbUltYWRhbSIpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oc2hvcnRlc3RQYWxpbmRyb21lKCJtYWRhTWltYWRhbSIpKTsKCX0KCQogICAgcHJpdmF0ZSBzdGF0aWMgQm9vbGVhbiBJc1BhbGluZHJvbWUoU3RyaW5nIHMpIHsKICAgICAgICBpbnQgbWlkcG9pbnQgPSBzLmxlbmd0aCgpLzI7CiAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBsZW5ndGggaXMgb2RkLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGUgY2VudHJhbCBjaGFyYWN0ZXIKICAgICAgICAvLyBhcyBpdCBpcyBjb21tb24gdG8gYm90aAogICAgICAgIHJldHVybiAobmV3IFN0cmluZ0J1aWxkZXIocy5zdWJzdHJpbmcoMCwgbWlkcG9pbnQpKS5yZXZlcnNlKCkudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLmVxdWFscyhzLnN1YnN0cmluZyhzLmxlbmd0aCgpIC0gbWlkcG9pbnQpKSk7CiAgICB9CgoJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNob3J0ZXN0UGFsaW5kcm9tZShTdHJpbmcgcykgewogICAgICAgIGludCBqID0gcy5sZW5ndGgoKTsKICAgICAgICB3aGlsZSAoIUlzUGFsaW5kcm9tZShzLnN1YnN0cmluZygwLCBqKSkpIHsKICAgICAgICAJai0tOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgc3VmZml4ID0gcy5zdWJzdHJpbmcoaik7CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKHN1ZmZpeCkucmV2ZXJzZSgpCiAgICAgICAgICAgICAgICAgIC5hcHBlbmQocy5zdWJzdHJpbmcoMCwgaikpCiAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc3VmZml4KQogICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTsgCgl9ICAgICAKfQ==