func_code_string: #include <bits/stdc++.h>   using namespace std;   inline char gc() {     static const long long L = 233333;     static char sxd[L], *sss = sxd, *ttt = sxd;     if (sss == ttt) {       ttt = (sss = sxd) + fread(sxd, 1, L, stdin);       if (sss == ttt) {         return EOF;       }     }     return *sss++;   }   inline char readalpha() {     char c = gc();     for (; !isalpha(c); c = gc())       ;     return c;   }   inline char readchar() {     char c = gc();     for (; c ==    ; c = gc())       ;     return c;   }   template <class T>   inline bool read(T& x) {     bool flg = false;     char c = gc();     x = 0;     for (; !isdigit(c); c = gc()) {       if (c ==  - ) {         flg = true;       } else if (c == EOF) {         return false;       }     }     for (; isdigit(c); c = gc()) {       x = (x << 1) + (x << 3) + (c ^ 48);     }     if (flg) {       x = -x;     }     return true;   }   template <class T>   inline void write(T x) {     if (x < 0) {       putchar( - );       x = -x;     }     if (x < 10) {       putchar(x | 48);       return;     }     write(x / 10);     putchar((x % 10) | 48);   }   const int maxn = 20;   const int maxl = 1000005;   int n;   int f[1 << maxn];   int g[1 << maxn];   char s[maxl];   int main() {     scanf( %s , s + 1);     n = strlen(s + 1);     for (int i = 1; i <= n; ++i) {       int now = i, nowzt = 0;       while (now) {         if (nowzt & (1 << (s[now] -  a ))) {           break;         }         nowzt |= (1 << (s[now] -  a ));         now--;         f[nowzt] = i - now;       }     }     int ans = 0;     for (int i = 0; i < 1 << 20; ++i) {       g[i] = f[i];     }     for (int i = 0; i < 1 << 20; ++i) {       for (int j = 0; j < 20; ++j) {         g[i | (1 << j)] = max(g[i], g[i | (1 << j)]);       }     }     for (int i = 0; i < 1 << 20; ++i) {       ans = max(ans, f[i] + g[((1 << 20) - 1) ^ i]);     }     printf( %d n , ans);     return 0;   }   