public boolean solve(int testNumber, OutputWriter out) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String sin = input.readLine();
if(sin == null || sin.isEmpty()) {
return false;
}
StringBuilder sb = new StringBuilder(sin).reverse();
String rev = sb.toString();
sb.append(’#’);
sb.append(sin);
char[] pattern = sb.toString().toCharArray();
f = new int[pattern.length + 1];
failurefn(pattern);
sin = sin + rev.substring(f[pattern.length]);
out.printLine(sin);
return true;
}
private void failurefn(char[] str) {
for (int i = 2; i <= str.length; i++) {
int j = f[i - 1];
while (true) {
if (str[j] == str[i - 1]) {
f[i] = j + 1;
break;
} else if (j == 0) {
break;
} else {
j = f[j];
}
}
}
}