let str;
while(str = readline()) {
let arr1 = str.split('');
let dp = [];
// for(let i = 0;i<str.length-1;i++) {
// dp[i] = [];
// dp[i][i] = 1;
// if(arr1[i] == arr1[i+1]) {
// dp[i][i+1] = 2;
// }
// }
let max = 0;
for(let i = 0;i<str.length;i++) {
dp[i] = [];
}
for(let i = 0;i<str.length;i++) {
for(let j = 0;j<str.length-i;j++) {
if(arr1[j] == arr1[j+i]) {
if(i == 0) {
dp[j][j+i] = true;
max = Math.max(max,1);
}else if(i == 1) {
dp[j][j+i] = true;
max = Math.max(max,2);
}else {
dp[j][j+i] = true && dp[j+1][j+i-1];
if(dp[j][j+i]){
max = Math.max(max,i+1);
}
}
}else {
dp[j][j+i] = false;
}
}
}
console.log(max);
}
while(str = readline()) {
let arr1 = str.split('');
let dp = [];
// for(let i = 0;i<str.length-1;i++) {
// dp[i] = [];
// dp[i][i] = 1;
// if(arr1[i] == arr1[i+1]) {
// dp[i][i+1] = 2;
// }
// }
let max = 0;
for(let i = 0;i<str.length;i++) {
dp[i] = [];
}
for(let i = 0;i<str.length;i++) {
for(let j = 0;j<str.length-i;j++) {
if(arr1[j] == arr1[j+i]) {
if(i == 0) {
dp[j][j+i] = true;
max = Math.max(max,1);
}else if(i == 1) {
dp[j][j+i] = true;
max = Math.max(max,2);
}else {
dp[j][j+i] = true && dp[j+1][j+i-1];
if(dp[j][j+i]){
max = Math.max(max,i+1);
}
}
}else {
dp[j][j+i] = false;
}
}
}
console.log(max);
}