#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int p = 131;
int n;
bool ok[N][20];
int sum[N][26];
long long del[N], add[N][26];
unsigned long long h[N], pw[N];
char s[N];
inline unsigned long long calc(int l, int r) {
  return h[r] - h[l - 1] * pw[r - l + 1];
}
inline int find(int a, int b) {
  int l = 0, r = min(n - a + 1, n - b + 1);
  while (l < r) {
    const int mid = l + r + 1 >> 1;
    if (calc(a, a + mid - 1) == calc(b, b + mid - 1))
      l = mid;
    else
      r = mid - 1;
  }
  return l;
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  long long ans = n;
  for (int i = pw[0] = 1; i <= n; ++i) {
    for (int j = 0; j < 26; ++j) sum[i][j] = sum[i - 1][j];
    pw[i] = pw[i - 1] * p;
    h[i] = h[i - 1] * p + s[i];
    ++sum[i][s[i] - 'a'];
  }
  for (int i = 1; i <= n; ++i) ok[i][1] = 1;
  for (int i = 2; i <= 16; ++i)
    for (int j = 1; j + (1 << i) - 2 <= n; ++j)
      if (ok[j][i - 1] && ok[j + (1 << i - 1)][i - 1]) {
        int l = j, mid = j + (1 << i - 1) - 1, r = j + (1 << i) - 2,
            c = s[mid] - 'a';
        if (calc(l, mid - 1) == calc(mid + 1, r) &&
            sum[r][c] - sum[l - 1][c] == 1)
          ok[j][i] = 1;
      }
  for (int i = 2; i <= 16; ++i)
    for (int j = 1; j + (1 << i) - 2 <= n; ++j) {
      int l = j, mid = j + (1 << i - 1) - 1, r = j + (1 << i) - 2,
          c = s[mid] - 'a';
      long long val = (r - l + 1ll) * (r - l + 1);
      if (ok[j][i]) {
        ans += val;
        del[j] += val;
        del[mid] -= val;
        del[mid + 1] += val;
        del[r + 1] -= val;
        for (int k = 0; k < 26; ++k)
          if (k != c && sum[r][k] - sum[l - 1][k]) add[mid][k] -= val;
      } else {
        if (ok[l][i - 1] && ok[mid + 1][i - 1] &&
            calc(l, mid - 1) == calc(mid + 1, r)) {
          for (int k = 0; k < 26; ++k)
            if (!(sum[r][k] - sum[l - 1][k])) add[mid][k] += val;
        } else {
          if (!ok[l][i - 1] && !ok[mid + 1][i - 1]) continue;
          int lcp = find(l, mid + 1), pl = l + lcp, pr = mid + 1 + lcp;
          if (calc(pl + 1, mid - 1) != calc(pr + 1, r)) continue;
          if (ok[l][i - 1] &&
              sum[r][c] - sum[l - 1][c] - (c == s[pr] - 'a') == 1)
            add[pr][s[pl] - 'a'] += val;
          if (ok[mid + 1][i - 1] &&
              sum[r][c] - sum[l - 1][c] - (c == s[pl] - 'a') == 1)
            add[pl][s[pr] - 'a'] += val;
        }
      }
    }
  long long mx = 0;
  for (int i = 1; i <= n; ++i) {
    del[i] += del[i - 1];
    for (int j = 0; j < 26; ++j)
      if (j != s[i] - 'a') mx = max(mx, add[i][j] - del[i]);
  }
  ans += mx;
  return printf("%lld\n", ans), 0;
}
