#include <bits/stdc++.h>
#define en '\n'
#define fi first
#define se second
#define pii pair<int,int>
#define ll long long
using namespace std;

string t;
int po[26],kr[26],n,ans;
vector<bool> pal;

void skrati()
{
    while(t.length() && t[0] == t.back())
        t = t.substr(1,t.length()-2);
}

bool proveri()
{
    for(int i = 0; i < 26; i++) if(po[i]!=kr[i]) return 0;
    return 1;
}

void PRVISLUCAJ()
{
    for(int k = 0; k <= (n-1)/2; ++k)
    {
        po[t[k]-'a']++;
        kr[t[n-1-k]-'a']++;
        if(proveri() && pal[k+1])
        {
            ans = k+1;
            break;
        }
    }
}

bool radi()
{
    for(int i = 0; i < 26; i++) po[i]-=kr[i];
    bool imanep=0;
    for(int i = 0; i < 26; i++)
    {
        if(po[i]<0) return 0;
        if(po[i]%2 && imanep) return 0;
        else imanep=1;
    }
    return 1;
}

void DRUGISLUCAJ()
{
    for(int i = 0; i < 26; i++) po[i]=kr[i]=0;
    for(int i = 0; i < (n+1)/2; i++) po[t[i]-'a']++;
    for(int i = (n+1)/2; i < n; i++) kr[t[i]-'a']++;

    for(int k = (n+1)/2; k < n; k++)
    {
        po[t[k]-'a']++;
        kr[t[k]-'a']--;
        if(radi())
        {
            ans=min(ans,k);
            break;
        }
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> t;
    skrati();
    if(t.length()==0)
    {
        cout << 1 << en;
        return 0;
    }
    n = (int)t.length();
    pal.resize(n);
    pal[(n-1)/2] = (t[(n-1)/2]==t[n/2]);
    for(int i = (n-1)/2 - 1; i>= 0; i--)
    {
        pal[i] = pal[i+1] && (t[i] == t[n-1-i]);
    }
    for(int i = n/2; i < n; i++) pal[i]=1;

    ///prvi slucaj
    /// trazimo k takvo da se prvih k poklapaju sa poslednjih k i ostatak u sredini je palindrom
    ///drugi slucaj
    /// ili trazimo k takvo da je prvih (poslednjih) k nadskup od ostatka i razlika je palindrom
    ans = n;
    ///PRVI SLUCAJ
    PRVISLUCAJ();
    DRUGISLUCAJ();
    reverse(t.begin(),t.end());
    DRUGISLUCAJ();
    cout << ans << en;


}