#include <bits/stdc++.h>
# define endl            '\n'
# define clr(x,a)        memset(x,a,sizeof(x))
# define vi              vector<int>
# define all(a)          a.begin(), a.end()
# define deb(x)          cout<<#x<<"=="<<x<<endl;
# define pb              push_back
# define sc              scanf
# define pr              printf
# define tc              int testcase; cin>>testcase; while(testcase--)
# define rev(s)          reverse(s.begin(),s.end())
# define linija          cout<<"___________\n";
using namespace std;
typedef long long ll;
const int mxN=200005;
int napolju[200], unutra[200];
string s;
struct slog{
   int poz;
   char c;
}pom, niz[mxN];
bool moze(){
   for(int i='a'; i<='z'; i++)
      if(unutra[i]<napolju[i])
         return 0;
   return 1;
}
/*
int solve2(){
   for(int i='a'; i<='z'; i++){
      napolju[i]=0;
      unutra[i]=0;
   }
   n=0;
   for(int i=0; i<s.size(); i++){
      if(s[i]!=s[s.size()-i-1]){
         n++;
         pom.c=s[i];
         pom.poz=i;
         napolju[s[i]]++;
         niz[n]=pom;
      }
   }
   for(int i=1; i<=n; i++){
      napolju[niz[i].c]--;
      unutra[niz[i].c]++;
      if(moze()) return (niz[i].poz-niz[1].poz+1);
   }
   return 1;
}
*/
vi poz;
int solve(){
   poz.clear();
   for(int i='a'; i<='z'; i++){
      napolju[i]=0;
      unutra[i]=0;
   }
   int maxi=0, granica=s.size()/2;
   if(s.size()%2==0) granica--;
   for(int i=0; i<s.size(); i++){
      if(s[i]!=s[s.size()-i-1]){
         poz.pb(i);
         if(i<=granica) maxi=i;
      }
   }
   if(poz.size()==0) return 1;
//   for(int i: poz) cout<<i<<" ";
//   cout<<endl;
   for(int i=poz[0]; i<s.size(); i++){
//      deb(i);
      if(i<=s.size()/2){
//         cout<<"manje\n";
         unutra[s[i]]++;
         napolju[s[s.size()-i-1]]++;
      }
      else{
//         cout<<"vece\n";
         unutra[s[i]]++;
         napolju[s[i]]--;
      }
      if(i==s.size()/2 && s.size()%2==1){
//         cout<<"neparna sredina\n";
         napolju[s[i]]--;
      }

//      cout<<unutra['a']<<", "<<unutra['b']<<", "<<unutra['c']<<endl;
//      cout<<napolju['a']<<", "<<napolju['b']<<", "<<napolju['c']<<endl;
//      cout<<endl;

      if(moze() && i>=maxi) return (i-poz[0]+1);
   }
}
int main(){
   cin>>s;
   int s1=solve();
//   deb(s1);
   rev(s);
//   cout<<s<<endl;
//   cout<<"DRUGA PETLJAA\n";
   int s2=solve();
//   deb(s2);
//   cout<<"\n\n\n\n\n\n";
   cout<<min(s1, s2)<<endl;

   return 0;
}