using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int najmanji_niz = 1;
        
        int najmanji_niz_2 = 1;
        string s = Console.ReadLine();
        List<char> lista = new List<char>(s.Length);
        List<char> lista_kopija = new List<char>(s.Length);
        int[,] broj_slova = new int[26, 2];
        int[,] broj_slova2 = new int[26, 2];
        for (int i = 0; i < s.Length; i++)
        {
            lista.Add(s[i]);
            lista_kopija.Add(s[i]);
        }
        
        if (lista.Count % 2 != 0)
        {
            lista.RemoveAt(lista.Count / 2);
        }
        
        List<char> pola_liste_1 = new List<char>(lista.Count / 2);
        List<char> pola_liste_2 = new List<char>(lista.Count / 2);
        pola_liste_1.InsertRange(0, lista);
        pola_liste_2.InsertRange(0, lista);
        pola_liste_1.RemoveRange(lista.Count / 2, lista.Count / 2);
        pola_liste_2.Reverse();
        pola_liste_2.RemoveRange(lista.Count / 2, lista.Count / 2);
        
        int opseg_1 = -1;
        int opseg_2 = -1;
        bool pronadjen_1 = false;
        bool pronadjen_2 = false;
        for (int i = 0; i < pola_liste_1.Count; i++)
        {
            if (pola_liste_1[i] != pola_liste_2[i] && !pronadjen_1)
            {
                opseg_1 = i;
                pronadjen_1 = true;
            }
            if (pola_liste_1[pola_liste_1.Count - 1 - i] != pola_liste_2[pola_liste_1.Count - 1 - i] && !pronadjen_2)
            {
                opseg_2 = pola_liste_1.Count - 1 - i;
                pronadjen_2 = true;
            }
        }
        
        int opseg_1_imp = opseg_1;
        int opseg_2_imp = opseg_2;
        
        bool napisano = false;
        
        int broj_neparnih_clanova = -1;
        char vrsta_neparnog_clana = '-';
        int pozicija_srednjeg_clana = -1;
        if (opseg_1 == -1 && opseg_2 == -1)
        {
            Console.WriteLine(najmanji_niz);
            napisano = true;
        }
        else
        {
            char ch = 'a';
            for (int i = 0; i < 26; i++)
            {
                if (((lista_kopija.Where(c => c == ch).Count() & 1) != 0)
                && (broj_neparnih_clanova == -1))
                {
                    vrsta_neparnog_clana = ch;
                    broj_neparnih_clanova = lista_kopija.Where(c => c == ch).Count();
                }
                
                broj_slova[i, 1] = lista_kopija.Where(c => c == ch).Count();
                
                ch++;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            int br1 = 0;
            for (int i = 0; i < lista_kopija.Count; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    br1++;
                    if (br1 == broj_neparnih_clanova / 2 + 1)
                    {
                        pozicija_srednjeg_clana = i;
                    }
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            for (int i = 0; i <= opseg_2; i++)
            {
                broj_slova[lista_kopija[i] - 97, 0] += 1;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            bool prekini1 = false;
            int br2 = 0;
            for (int i = 0; i < 26; i++)
            {
                if (broj_slova[i, 0] >= broj_slova[i, 1] / 2)
                {
                    br2++;
                }
            }
            if (br2 == 26)
            {
                prekini1 = true;
            }
            br2 = 0;
            
            while(!prekini1)
            {
                br2 = 0;
                opseg_2++;
                if (lista_kopija[opseg_2] != vrsta_neparnog_clana)
                {
                    broj_slova[lista_kopija[opseg_2] - 97, 0] += 1;
                }
                
                for (int i = 0; i < 26; i++)
                {
                    if (broj_slova[i, 0] >= (broj_slova[i, 1] - (broj_slova[i, 1] / 2)))
                    {
                        br2++;
                    }
                }
                if (br2 == 26)
                {
                    prekini1 = true;
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                if (lista_kopija.Count / 2 != vrsta_neparnog_clana)
                {
                    if (pozicija_srednjeg_clana >= lista_kopija.Count / 2
                    && pozicija_srednjeg_clana > opseg_2)
                    {
                        opseg_2 = pozicija_srednjeg_clana;
                    }
                    if (lista_kopija.Count / 2 > pozicija_srednjeg_clana
                    && lista_kopija.Count / 2 > opseg_2)
                    {
                        opseg_2 = lista_kopija.Count / 2;
                    }
                }
            }
            
            for (int i = 0; i < lista_kopija.Count; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    broj_slova[lista_kopija[i] - 97, 1] += 1;
                }
            }
            
            for (int i = 0; i <= opseg_2; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    broj_slova[lista_kopija[i] - 97, 0] += 1;
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                bool prekini2 = false;
                if (broj_slova[vrsta_neparnog_clana - 97, 0] >= broj_slova[vrsta_neparnog_clana - 97, 1] / 2)
                {
                    prekini2 = true;
                }
            
                while(!prekini2)
                {
                    opseg_2++;
                    if (lista_kopija[opseg_2] == vrsta_neparnog_clana)
                    {
                        broj_slova[lista_kopija[opseg_2] - 97, 0] += 1;
                    }
                
                    if (broj_slova[vrsta_neparnog_clana - 97, 0] >= broj_slova[vrsta_neparnog_clana - 97, 1] / 2)
                    {
                        prekini2 = true;
                    }
                }
            }
            
            najmanji_niz = opseg_2 + 1 - opseg_1;
            ///////////////////////////////////////////////////////////////////
            lista.Reverse();
            lista_kopija.Reverse();
            
            opseg_1 = opseg_1_imp;
            opseg_2 = opseg_2_imp;
            
            broj_neparnih_clanova = -1;
            vrsta_neparnog_clana = '-';
            pozicija_srednjeg_clana = -1;
            ch = 'a';
            for (int i = 0; i < 26; i++)
            {
                if (((lista_kopija.Where(c => c == ch).Count() & 1) != 0)
                && (broj_neparnih_clanova == -1))
                {
                    vrsta_neparnog_clana = ch;
                    broj_neparnih_clanova = lista_kopija.Where(c => c == ch).Count();
                }
                broj_slova2[i, 1] = lista_kopija.Where(c => c == ch).Count();
                
                ch++;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova2[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova2[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            br1 = 0;
            for (int i = 0; i < lista_kopija.Count; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    br1++;
                    if (br1 == broj_neparnih_clanova / 2 + 1)
                    {
                        pozicija_srednjeg_clana = i;
                    }
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova2[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova2[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            for (int i = 0; i <= opseg_2; i++)
            {
                broj_slova2[lista_kopija[i] - 97, 0] += 1;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova2[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova2[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            prekini1 = false;
            br2 = 0;
            for (int i = 0; i < 26; i++)
            {
                if (broj_slova2[i, 0] >= broj_slova2[i, 1] / 2)
                {
                    br2++;
                }
            }
            if (br2 == 26)
            {
                prekini1 = true;
            }
            br2 = 0;
            
            while(!prekini1)
            {
                br2 = 0;
                opseg_2++;
                if (lista_kopija[opseg_2] != vrsta_neparnog_clana)
                {
                    broj_slova2[lista_kopija[opseg_2] - 97, 0] += 1;
                }
                
                for (int i = 0; i < 26; i++)
                {
                    if (broj_slova2[i, 0] >= (broj_slova2[i, 1] - (broj_slova2[i, 1] / 2)))
                    {
                        br2++;
                    }
                }
                if (br2 == 26)
                {
                    prekini1 = true;
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                broj_slova[vrsta_neparnog_clana - 97, 1] = 0;
                broj_slova[vrsta_neparnog_clana - 97, 0] = 0;
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                if (lista_kopija.Count / 2 != vrsta_neparnog_clana)
                {
                    if (pozicija_srednjeg_clana >= lista_kopija.Count / 2
                    && pozicija_srednjeg_clana > opseg_2)
                    {
                        opseg_2 = pozicija_srednjeg_clana;
                    }
                    if (lista_kopija.Count / 2 > pozicija_srednjeg_clana
                    && lista_kopija.Count / 2 > opseg_2)
                    {
                        opseg_2 = lista_kopija.Count / 2;
                    }
                }
            }
            
            for (int i = 0; i < lista_kopija.Count; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    broj_slova2[lista_kopija[i] - 97, 1] += 1;
                }
            }
            
            for (int i = 0; i <= opseg_2; i++)
            {
                if (lista_kopija[i] == vrsta_neparnog_clana)
                {
                    broj_slova2[lista_kopija[i] - 97, 0] += 1;
                }
            }
            
            if (lista_kopija.Count % 2 != 0)
            {
                bool prekini2 = false;
                if (broj_slova2[vrsta_neparnog_clana - 97, 0] >= broj_slova2[vrsta_neparnog_clana - 97, 1] / 2)
                {
                    prekini2 = true;
                }
            
                while(!prekini2)
                {
                    opseg_2++;
                    if (lista_kopija[opseg_2] == vrsta_neparnog_clana)
                    {
                        broj_slova2[lista_kopija[opseg_2] - 97, 0] += 1;
                    }
                
                    if (broj_slova2[vrsta_neparnog_clana - 97, 0] >= broj_slova2[vrsta_neparnog_clana - 97, 1] / 2)
                    {
                        prekini2 = true;
                    }
                }
            }
            najmanji_niz_2 = opseg_2 + 1 - opseg_1;
        }
        
        if (najmanji_niz_2 < najmanji_niz)
        {
            najmanji_niz = najmanji_niz_2;
        }
        
        if (!napisano)
        {
            Console.WriteLine(najmanji_niz);
        }
    }
}