// // Created by cteam012 on 12/1/19. // #include #include #include #include using namespace std; #define f(i,a,b) for(int i = (a); i < (b);++i) #define b(i,a,b) for(int i = (a); i >= (b);--i) vector> occs(26); int main() { //vector> occs(26); ios_base::sync_with_stdio(0); f(i,0,26) { occs[i] = vector(); } int size; cin >> size; string s; cin >> s; f(i,0,size) { //cout << s[i] << ';' << (s[i] - 'a') << "|"; occs[s[i]-'a'].push_back(i); } f(i,0,26) { sort(occs[i].begin(), occs[i].end()); } vector letterptrs; f(i,0,26) { letterptrs.push_back(0); } int position = 0; int longest = 0; bool correct = true; while(position < size) { correct = true; f(i, position, (size + position)/2) { if(s[i] != s[size - 1 + position - i]) { int lastpos = size - 1 + position - i; int lastlet = s[lastpos] - 'a'; correct = false; while(occs[lastlet][letterptrs[lastlet]] < i) { letterptrs[lastlet]++; } position = occs[lastlet][letterptrs[lastlet]] - i + position; break; } } if(correct) { longest = size - position; break; } } cout << size - longest; return 0; }