func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 998244353;   unsigned long long h[100010], bin[100010];   inline unsigned long long hsh(const int l, const int r) {     return h[r] - h[l - 1] * bin[r - l + 1];   }   inline int find(const int l1, const int r1, const int l2, const int r2) {     int l = 0, r = r1 - l1 + 1;     while (l < r) {       const int mid = l + r + 1 >> 1;       if (hsh(l1, l1 + mid - 1) == hsh(l2, l2 + mid - 1))         l = mid;       else         r = mid - 1;     }     return l + 1;   }   char s[100010];   int n, pre[100010][26], suf[100010][26], cnt[100010][26];   unordered_map<int, int> gy[100010];   long long det[26][100010], sum[100010];   int main() {     scanf( %s , s + 1);     n = strlen(s + 1);     for (int i = bin[0] = 1; i <= n; i++)       bin[i] = bin[i - 1] * 131, h[i] = h[i - 1] * 131 + s[i], s[i] -=  a ;     for (int i = 1; i <= n; i++) {       for (int j = 0; j < 26; j++)         pre[i][j] = pre[i - 1][j], cnt[i][j] = cnt[i - 1][j];       if (i != 1) pre[i][s[i - 1]] = i - 1;       cnt[i][s[i]]++;     }     for (int i = 0; i < 26; i++) suf[n + 1][i] = n + 1;     for (int i = n; i; i--) {       for (int j = 0; j < 26; j++) suf[i][j] = suf[i + 1][j];       if (i != n) suf[i][s[i + 1]] = i + 1;     }     long long lst = 0;     for (int i = 1; i <= n; i++) {       const int L = min(i - pre[i][s[i]], suf[i][s[i]] - i);       for (int j = 0; j < L; j = j << 1 | 1)         if ((!j || gy[i - j].count(i - 1)) &&             hsh(i - j, i - 1) == hsh(i + 1, i + j)) {           const long long tmp = 1ll * (j << 1 | 1) * (j << 1 | 1);           lst += tmp, gy[i - j][i + j] = 1;           sum[i - j] -= tmp;           sum[i] += tmp;           sum[i + 1] -= tmp;           sum[i + j + 1] += tmp;         }       for (int ch = 0; ch < 26; ch++) {         const int nL = min(i - pre[i][ch], suf[i][ch] - i);         for (int j = 0; j <= min(i - 1, n - i); j = j << 1 | 1)           if ((!j || gy[i - j].count(i - 1)) &&               hsh(i - j, i - 1) == hsh(i + 1, i + j))             if (j >= nL && j < L)               det[ch][i] -= 1ll * (j << 1 | 1) * (j << 1 | 1);             else if (j >= L && j < nL)               det[ch][i] += 1ll * (j << 1 | 1) * (j << 1 | 1);       }     }     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= min(i - 1, n - i); j = j << 1 | 1)         if ((gy[i - j].count(i - 1) || gy[i + 1].count(i + j)) &&             hsh(i - j, i - 1) != hsh(i + 1, i + j)) {           const int p = find(i - j, i - 1, i + 1, i + j);           if (p <= j && hsh(i - j + p, i - 1) == hsh(i + 1 + p, i + j)) {             if (gy[i - j].count(i - 1) &&                 cnt[i + j][s[i]] - cnt[i - j - 1][s[i]] - (s[i + p] == s[i]) == 1)               det[s[i - j + p - 1]][i + p] += 1ll * (j << 1 | 1) * (j << 1 | 1);             if (gy[i + 1].count(i + j) && cnt[i + j][s[i]] -                                                   cnt[i - j - 1][s[i]] -                                                   (s[i - j + p - 1] == s[i]) ==                                               1)               det[s[i + p]][i - j + p - 1] += 1ll * (j << 1 | 1) * (j << 1 | 1);           }         }     }     long long ans = 0;     for (int i = 1; i <= n; i++) sum[i] += sum[i - 1];     for (int i = 1; i <= n; i++)       for (int j = 0; j < 26; j++)         ans = max(ans, lst + det[j][i] + (j != s[i] ? sum[i] : 0));     cout << ans << endl;   }   