#include <bits/stdc++.h>
using namespace std;
const int mn = 1e5 + 8, bas = 716203;
int n, c[mn][26];
bool f[20][mn];
char s[mn];
unsigned long long h[mn], po[mn];
long long inc[mn][26], del[mn], ans, res;
inline unsigned long long Hash(int l, int r) {
  return h[r] - (l ? h[l - 1] : 0) * po[r - l + 1];
}
inline bool Equal(int l, int r, int len) {
  return len <= 0 || Hash(l, l + len - 1) == Hash(r, r + len - 1);
}
inline int C(int l, int r, int d) { return c[r][d] - (l ? c[l - 1][d] : 0); }
inline int LCP(int l, int r) {
  int bot = 1, top = n - r;
  while (bot < top) {
    int mid = bot + top >> 1;
    Equal(l, r, mid) ? bot = mid + 1 : top = mid;
  }
  return top - 1;
}
int main() {
  scanf("%s", s);
  n = strlen(s);
  for (int i = 0; i < n; i++) {
    h[i] = (i ? h[i - 1] : 0) * bas + 1 + (s[i] -= 'a');
    po[i] = i ? po[i - 1] * bas : 1;
    if (i) memcpy(c[i], c[i - 1], sizeof c[i]);
    c[i][s[i]]++;
  }
  for (int i = 0; i < n; i++) f[0][i] = true, ans++;
  for (int k = 1; (1 << k) < n; k++)
    for (int m = 0; m < n; m++) {
      int l = m - (1 << k) + 1, r = m + (1 << k) - 1;
      if (l < 0 || r >= n) continue;
      int ml = m - (1 << k - 1), mr = m + (1 << k - 1);
      long long val = ((long long)r - l + 1) * (r - l + 1);
      if (f[k - 1][ml] && Equal(l, m + 1, m - l) && C(l, r, s[m]) == 1) {
        f[k][m] = 1;
        ans += val;
        del[l] -= val, del[m] += val;
        del[m + 1] -= val, del[r + 1] += val;
        for (int i = 0; i < 26; i++)
          if (C(l, r, i) - (i == s[m])) inc[m][i] -= val;
      } else if (f[k - 1][ml] && Equal(l, m + 1, m - l)) {
        for (int i = 0; i < 26; i++)
          if (!C(l, r, i)) inc[m][i] += val;
      } else {
        int dx = LCP(l, m + 1);
        if (Equal(l + dx + 1, m + dx + 2, m - l - dx - 1)) {
          if (f[k - 1][ml])
            if (C(l, r, s[m]) - (s[m + 1 + dx] == s[m]) + (s[m] == s[l + dx]) ==
                1)
              inc[m + 1 + dx][s[l + dx]] += val;
          if (f[k - 1][mr])
            if (C(l, r, s[m]) + (s[m + 1 + dx] == s[m]) - (s[m] == s[l + dx]) ==
                1)
              inc[l + dx][s[m + 1 + dx]] += val;
        }
      }
    }
  for (int i = 1; i < n; i++) del[i] += del[i - 1];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 26; j++) res = max(res, inc[i][j] + del[i]);
  cout << ans + res << endl;
  fclose(stdin);
  fclose(stdout);
  return 0;
}
