func_code_string: #include <bits/stdc++.h>   char s[1000010];   int max_pos_by_allowed_and_len[1 << 20][21];   constexpr int full = (1 << 20) - 1;   template <typename T>   void mx(T& x, T y) {     x = (x > y ? x : y);   }   void update(const int* __restrict__ a, int* __restrict__ b) {     for (int i = 0; i < 21; i += 7) {       mx(b[i + 0], a[i + 0]);       mx(b[i + 1], a[i + 1]);       mx(b[i + 2], a[i + 2]);       mx(b[i + 3], a[i + 3]);       mx(b[i + 4], a[i + 4]);       mx(b[i + 5], a[i + 5]);       mx(b[i + 6], a[i + 6]);     }   }   int main() {     scanf( %s , s);     int n = strlen(s);     for (int i = 0; i < n; ++i) s[i] -=  a ;     for (int i = 1; i <= n; ++i) {       int used = 0;       for (int j = i; j > 0; --j) {         if ((used >> s[j - 1]) & 1) break;         used |= (1 << s[j - 1]);         max_pos_by_allowed_and_len[full ^ used][i - j + 1] = i;       }     }     for (int mask = full; mask > 0; --mask) {       for (int bit = 0; bit < 20; ++bit) {         int updated = mask ^ (1 << bit);         if (updated > mask) continue;         update(&max_pos_by_allowed_and_len[mask][0],                &max_pos_by_allowed_and_len[updated][0]);       }     }     int ans = 1;     for (int i = 1; i <= n; ++i) {       int used = 0;       for (int j = i; j > 0; --j) {         if ((used >> s[j - 1]) & 1) break;         used |= (1 << s[j - 1]);         for (int other_len = 20; other_len >= 0; --other_len) {           if (max_pos_by_allowed_and_len[used][other_len] > i) {             mx(ans, i - j + 1 + other_len);             break;           }         }       }     }     printf( %d n , ans);     return 0;   }   