#include #include #include using namespace std; int bitCount(int i) { i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i + (i >> 4)) & 0x0f0f0f0f; i = i + (i >> 8); i = i + (i >> 16); return i & 0x3f; // return 1; } int main() { int L; scanf("%d", &L); string line; cin >> line; int map[L]; int right[L]; for (int i = 0; i < L; i++) { map[i] = line[i] - 'a'; // cout << map[i] << endl; } right[L-1] = map[L-1]; for (int i = L-2; i >= 0; i--) { right[i] = right[i+1] ^ map[i]; } for (int length = L; length >= 0; length--) { if (length != L && length%2 == 0) { continue; } int minBitCount = 9999999; for (int j = 0; j < L-length+1; j++) { int diff; if (j < L-length) { diff = right[j+length] ^ right[j]; } else { diff = right[j]; } // System.out.printf("%d:%d - %s\n", i,j,Integer.toString(diff, 2)); int bc = bitCount(diff); if (bc <= 1) { cout << length << endl; return 0; } if (bc < minBitCount) { minBitCount = bc; } } if (minBitCount > 2) { length -= (minBitCount-2); } } return 0; }