= 0 && i + d[i] < n && s.charAt(i - d[i]) == s.charAt(i + d[i])) { d[i]++; } if (i + d[i] - 1 > r) { l = i - d[i] + 1; r = i + d[i] - 1; } } return d; } }"> = 0 && i + d[i] < n && s.charAt(i - d[i]) == s.charAt(i + d[i])) { d[i]++; } if (i + d[i] - 1 > r) { l = i - d[i] + 1; r = i + d[i] - 1; } } return d; } }"> = 0 && i + d[i] < n && s.charAt(i - d[i]) == s.charAt(i + d[i])) { d[i]++; } if (i + d[i] - 1 > r) { l = i - d[i] + 1; r = i + d[i] - 1; } } return d; } }">
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
StringBuilder s = new StringBuilder("$#");
int n = str.length(), k = 0;
for (int i = 0; i < n; i++) {
s.append(str.charAt(i)).append("#");
}
n = s.length();
int[] d = GET(s, n);
int result = 0;
for (int i = 0; i < n; i++) {
result = Math.max(result, d[i] - 1);
}
System.out.println(result);
}
public static int[] GET(StringBuilder s, int n) {
int[] d = new int[n];
int l = 0, r = 0;
for (int i = 1; i < n; i++) {
if (i <= r) {
d[i] = Math.min(r - i + 1, d[l + r - i]);
}
while (i - d[i] >= 0 && i + d[i] < n && s.charAt(i - d[i]) == s.charAt(i + d[i])) {
d[i]++;
}
if (i + d[i] - 1 > r) {
l = i - d[i] + 1;
r = i + d[i] - 1;
}
}
return d;
}
}