#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n;
char ch[N];
unsigned long long pw[N], fix[N];
bool gray[N][20];
int pos[N], pre[N][26], s[N];
long long cf[N], chg[N][26];
inline unsigned long long Hash(int l, int r) {
  if (l > r) return 0;
  return fix[r] - fix[l - 1] * pw[r - l + 1];
}
inline int LCP(int a, int b) {
  if (s[a] != s[b]) return 0;
  int l = 1, r = min(n - a + 1, n - b + 1), ans = 0, mid;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (Hash(a, a + mid - 1) == Hash(b, b + mid - 1))
      l = mid + 1, ans = mid;
    else
      r = mid - 1;
  }
  return ans;
}
int main() {
  scanf("%s", ch + 1);
  n = strlen(ch + 1);
  for (int i = pw[0] = 1; i <= n; i++) {
    s[i] = ch[i] - 'a';
    pw[i] = pw[i - 1] * 27;
    fix[i] = fix[i - 1] * 27 + s[i] + 1;
    for (int j = 0; j < 26; j++) pre[i][j] = pre[i - 1][j];
    pre[i][s[i]]++;
  }
  long long ans = n;
  int p;
  for (int i = 1; i <= n; i++) gray[i][0] = 1;
  for (int t = 1, l = 1, k = 1; l * 2 + 1 <= n; l = l << 1 | 1, k <<= 1, t++) {
    long long val = 1LL * (2 * l + 1) * (2 * l + 1);
    for (int i = l + 1; i + l <= n; i++) {
      if (Hash(i - l, i - 1) == Hash(i + 1, i + l) && gray[i - k][t - 1]) {
        for (int j = 0; j < 26; j++)
          if (pre[i - 1][j] == pre[i - l - 1][j]) chg[i][j] += val;
        if (pre[i - 1][s[i]] == pre[i - l - 1][s[i]]) {
          gray[i][t] = 1;
          ans += val;
          cf[i - l] += val;
          cf[i + l + 1] -= val;
        }
      } else {
        p = -1;
        if (gray[i - k][t - 1] && pre[i - 1][s[i]] == pre[i - l - 1][s[i]]) {
          p = min(LCP(i - l, i + 1), l);
          if (Hash(i - l + p + 1, i - 1) == Hash(i + p + 2, i + l))
            chg[i + 1 + p][s[i - l + p]] += val;
        }
        if (gray[i + k][t - 1] && pre[i + l][s[i]] == pre[i][s[i]]) {
          if (p == -1) p = min(LCP(i - l, i + 1), l);
          if (Hash(i - l + p + 1, i - 1) == Hash(i + p + 2, i + l))
            chg[i - l + p][s[i + 1 + p]] += val;
        }
      }
    }
  }
  long long add = 0;
  for (int i = 1; i <= n; i++) {
    cf[i] += cf[i - 1];
    for (int j = 0; j < 26; j++) add = max(add, chg[i][j] - cf[i]);
  }
  printf("%lld\n", ans + add);
  return 0;
}
