#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;
}
