#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <string>
using namespace std;
//这题用二分查找,但是比较特殊,因为可能有i存在(i + 1)不存在(i + 2)存在的情况
//所以要加判断条件
bool judge(string& str, int start, int end) {
while (start < end) {
if (str[start] != str[end]) return false;
start++, end--;
}
return true;
}
bool check(string& str, int l) {
for (int i = l - 1; i < str.size(); i++) {
int j = i - l + 1;
if (judge(str, j, i)) return true;
}
return false;
}
int solve(string& str) {
//注释掉的是我第一次意识到这题二分查找的特殊性而采取的方法
//即就是分别判断奇数和偶数
/*int head = 0, tail = str.size(), mid;
while (head < tail) {
mid = (head + tail + 1) / 2;
mid = mid % 2 == 1 ? mid + 1 : mid;
if (check(str, mid)) head = mid;
else tail = mid - 2;
}
int head_ = 0, tail_ = str.size(), mid_;
while (head_ < tail_) {
mid_ = (head_ + tail_ + 1) / 2;
mid_ = mid_ % 2 == 1 ? mid_ : mid_ + 1;
if (check(str, mid_)) head_ = mid_;
else tail_ = mid_ - 2;
}
return head > head_ ? head : head_;
*/
//以下是优化掉的代码
int head = 0, tail = str.size(), mid;
while (head < tail) {
mid = (head + tail + 1) / 2;
if (!check(str, mid) && !check(str, mid + 1)) tail = mid - 1;
else head = mid;
}
return head;
}
int main() {
string str;
//感谢这个题,第一次学到这个函数
//getline(cin, ***) 可以接收带空格的字符串
getline(cin, str);
cout << solve(str) << endl;
return 0;
}