#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], n, 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 solve(){
   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++) cout<<niz[i].c<<" ";
//   cout<<endl;
//   for(int i=1; i<=n; i++) cout<<niz[i].poz<<" ";
//   cout<<endl;
   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;
}

int main(){
   cin>>s;
   int s1=solve();
   rev(s);
   int s2=solve();

   cout<<min(s1, s2)<<endl;

   return 0;
}