#include #include #include using namespace std; string orig_str; int pocet_lichy(vector & pole,int vymaz, int & lichy_pocet) { int p_l = 0; pole[vymaz]--; for(int i = 0; i < 20; i++) { if(pole[i] % 2 == 1) p_l++; } lichy_pocet = p_l; } int rekurzivka(vector pole,int left, int right,int vymaz,int all_count,int liche_count,bool first_time ) { int rek1 = 0, rek2 = 0; if(all_count == 1) return 1; if(!first_time) pocet_lichy(pole,vymaz,liche_count); else first_time = false; if((all_count % 2 == 1) && (liche_count == 1) ) return all_count; else if ((all_count % 2 == 0) && (liche_count == 0) ) return all_count; else { all_count--; rek1 = rekurzivka(pole,left+1,right,orig_str[left]-97,all_count,liche_count,false); rek2 = rekurzivka(pole,left,right-1,orig_str[right]-97,all_count,liche_count,false); } if(rek1 > rek2 ) return rek1; else return rek2; } int main() { vector a(20); int liche_counter = 0; int count; int rek1,rek2; cin >> count; cin >> orig_str; for(int i = 0; i < 20; i++) a[i] = 0; for(int i = 0; i < count; i++) a[orig_str[i] - 97]++; for(int i = 0 ; i < 20; i++) { if(a[i] % 2 == 1) liche_counter++; } rek1 = rekurzivka(a,0,count-1,orig_str[0]-97,count,liche_counter,true); //rek2 = rekurzivka(a,0,count-1,orig_str[count - 1]-97,count,liche_counter,true); cout << rek1 << endl; return 0; }