#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define ll long long
#define NMAX (int)1e6
#define vi vector<int>
#define pii pair<int,int>
#define w(x) cout<<#x<<':'<<x<<endl;
#define PB push_back
#define juseinbolt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

int l=INT_MAX, r=-1;
void teraj_levo(vector<set<int>> &pozicije, string &s, int il, int ir)
{
    if(il>=ir) return;

    int L_slovo=s[il], R_slovo=s[ir];
    pozicije[L_slovo].erase(begin(pozicije[L_slovo]));
    pozicije[R_slovo].erase(prev(end(pozicije[R_slovo])));

    if(L_slovo!=R_slovo)
    {
        l=min(l,il);
        if(pozicije[R_slovo].size()) ///ima desno slovo u range pa ce ga dotera na levu poziciju
        {
            //pozicije[R_slovo].erase(prev(end(pozicije[R_slovo])));

            int pos=*begin(pozicije[R_slovo]);
            r=max(r,pos);
            pozicije[s[pos]].erase(begin(pozicije[s[pos]]));
            //pozicije[L_slovo].erase(begin(pozicije[L_slovo]));
            pozicije[L_slovo].insert(pos);
            swap(s[il],s[pos]);
        }
        else
        {
            r=ir; return;
        }
    }

    teraj_levo(pozicije,s,il+1,ir-1);
}

void teraj_desno(vector<set<int>> &pozicije, string &s, int il, int ir)
{
    if(il>=ir) return;

    int L_slovo=s[il], R_slovo=s[ir];
    pozicije[L_slovo].erase(begin(pozicije[L_slovo]));
    pozicije[R_slovo].erase(prev(end(pozicije[R_slovo])));

    if(L_slovo!=R_slovo)
    {
        r=max(r,ir);
        if(pozicije[L_slovo].size()) ///ima levo slovo u range pa ce ga dotera na desnu poziciju
        {
            //pozicije[R_slovo].erase(prev(end(pozicije[R_slovo])));

            int pos=*begin(pozicije[L_slovo]);
            l=min(l,pos);
            pozicije[s[pos]].erase(begin(pozicije[s[pos]]));
            //pozicije[L_slovo].erase(begin(pozicije[L_slovo]));
            pozicije[R_slovo].insert(pos);
            swap(s[ir],s[pos]);
        }
        else
        {
            l=il; return;
        }
    }

    teraj_desno(pozicije,s,il+1,ir-1);
}

int main()
{
    juseinbolt;

    string s; cin>>s;
    int n=s.size(), ans=n;
    vector<set<int>> pozicije(26+(int)'a'+5);

    for(int i=0; i<n; ++i)
    {
        pozicije[s[i]].insert(i);
    }

    string sl=s;
    teraj_levo(pozicije,sl,0,n-1);
    //cout<<l<<" "<<r<<endl;
    if(r!=-1) ans=min(ans,r-l+1);
    else ans=1;

    string sr=s;
    for(auto &p:pozicije) p.clear();
    l=INT_MAX, r=-1;
    for(int i=0; i<n; ++i)
    {
        pozicije[sr[i]].insert(i);
    }
    teraj_desno(pozicije,sr,0,n-1);
    //cout<<l<<" "<<r<<endl;
    if(r!=-1) ans=min(ans,r-l+1);
    else ans=1;

    cout<<ans;

    return 0;
}