#include <iostream>
#include <string.h>
#include <vector>
using namespace std;

#define MAX_KARAKTERA 200000
typedef unsigned int uint;

struct type{
    char s;
    uint num;
};

int inVector(vector<type>& vec, char slovo){
    for(uint j = 0; j < vec.size(); j++){
        if(vec[j].s == slovo){
            return j;
        }
    }
    return -1;
}

uint brojSlova(vector<type>& vec, char slovo){
    for(uint j = 0; j < vec.size(); j++){
        if(vec[j].s == slovo){
            return vec[j].num;
        }
    }
    return -1;
}

int main()
{
    char niz[MAX_KARAKTERA + 1];
    cin >> niz;
    uint duzinaNiza = strlen(niz);

    int duzina = -1;
    for(uint i = 0; i < duzinaNiza / 2; i++){
        if(niz[i] != niz[duzinaNiza - 1 - i]){
            duzina = i;
            break;
        }
    }

    if(duzina == -1){
        cout << "1" << endl;
        exit(0);
    }

    vector<type> slova;
    vector<type> kopijaSlova;
    char kopija[duzinaNiza - (duzina * 2)];
    for(uint i = duzina; i < duzinaNiza - (duzina * 2) + (duzina == 0 ? 0 : 1); i++){
        kopija[i - duzina] = niz[i];
        int temp = inVector(slova, niz[i]);
        if(temp != -1){
            slova[temp].num++;
            kopijaSlova[temp].num++;
        }else{
            type slovo = {niz[i], 1};
            slova.push_back(slovo);
            kopijaSlova.push_back(slovo);
        }
    }

    char temp = 0;
    uint count = 0;
    for(uint i = 0; i < kopijaSlova.size(); i++){
        kopijaSlova[i].num /= 2;
        if(slova[i].num % 2 == 1) temp = slova[i].s;
        count += kopijaSlova[i].num;
    }

    char noviNiz[duzinaNiza - (duzina * 2) + 1];
    uint trenutni = 0;
    uint brojac = 0;

    for (int i = 0; i < count; i++)
    {
        if(brojac > kopijaSlova.size()) break;
        if(kopijaSlova[i % kopijaSlova.size()].num == 0){
            brojac++;
            count++;
            continue;
        }
        brojac = 0;
        if(brojSlova(kopijaSlova, kopija[trenutni]) && kopijaSlova[i % kopijaSlova.size()].s != kopija[trenutni]){
            i -= 2;
            continue;
        }

        noviNiz[trenutni] = kopijaSlova[i % kopijaSlova.size()].s;
        kopijaSlova[i % kopijaSlova.size()].num--;
        trenutni++;
    }
    noviNiz[trenutni] = '\0';
    string temp_str(noviNiz);
    string kraj(temp_str.rbegin(), temp_str.rend());
    if(temp != 0) {
        noviNiz[trenutni] = temp;
        noviNiz[trenutni + 1] = '\0';
    }
    strcat(noviNiz, kraj.c_str());

    trenutni = 0;
    for(uint i = 0; i < duzinaNiza - (duzina * 2); i++){
        if(kopija[i] != noviNiz[i]){
            break;
        }
        trenutni++;
    }

    cout << duzinaNiza - (duzina * 2) - trenutni << endl;
    /*
    for(int i = 0; i < slova.size(); i++){
        cout << slova[i].s << ": " << slova[i].num << endl;
    }
*/





    return 0;
}