//马拉车+1
#include <bits/stdc++.h>
using namespace std;
string Manacher(string tmp)
{
string str = "$#";
for(int i = 0; i<tmp.length(); i++)
{
str+=tmp[i];
str+='#';
}
int* len = new int[str.size()]; //存储以str每个字符为中心最长回文串的半径
int ioo = 0, max = 0;
int maxlen = 0, start = 0; //总是忘记初始化为0,哎
for(int i = 1; i<str.length(); i++)
{
if(i<max)
{
if(len[2*ioo-i] < max-i)
len[i] = len[2*ioo-i];
else
len[i] = max-i;
}
else
len[i] = 1;
while(str[i+len[i]] == str[i-len[i]] && i+len[i]<str.length() && i-len[i]>=0)
len[i]++;
if(i+len[i] > max) //更新max和ioo
{
max = i+len[i];
ioo = i;
}
if(len[i]-1 > maxlen) //更新maxlen和start 为当前最长回文串(原字符串中)的长度和起始位置
{
maxlen = len[i] - 1;
start = (i - len[i]) / 2;
}
}
delete []len; //delete不能忘
return tmp.substr(start, maxlen);
}
int main()
{
string input_str;
cin >> input_str;
string out_str = Manacher(input_str);
//cout << out_str;
cout << out_str.length();
return 0;
}