//https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

#include <iostream>
#include <algorithm>
#include <string.h>

using namespace std;

int main() {
    string s1;

    while(cin >> s1){
        int size = s1.size();
        int maxn = 0;
        int tem = 0;
        int dp[size][size];

        memset(dp, 0, sizeof(dp));

        string s2 = s1;
        reverse(s2.begin(), s2.end());

        for(int i = 0;i<size;i++)
            for(int j = 0;j<size;j++){
                if(s2[i]==s1[j]){
                    if(i==0||j==0)
                        dp[i][j] = 1;
                    else dp[i][j] = dp[i-1][j-1]+1;
                    if((i+j+2==size)||(i+j+1==size)){
                        if(i+j+2==size) tem = dp[i][j]*2;
                        else tem = dp[i][j]*2-1;
                        maxn = max(maxn, tem);
                    }
                }
            }

        cout << maxn;
    }
}