#include <bits/stdc++.h>
using namespace std;
int n, len[27], s[100100], tong[100100][27], pd[100100][27];
long long ans, bs, c[100100], w[100100][27];
unsigned long long hs[100100], bit[100100];
char ch[100100];
int Hash(int l, int r, int len) {
  return hs[l + len - 1] - hs[l - 1] * bit[len] ==
         hs[r + len - 1] - hs[r - 1] * bit[len];
}
int check(int i, int l) {
  if (l == 0) return 1;
  int mid = i + len[l - 1];
  if (pd[i][l - 1] && Hash(i, mid + 1, len[l - 1]) &&
      !(tong[mid - 1][s[mid]] - tong[i - 1][s[mid]]))
    return 1;
  else
    return 0;
}
int get_lcp(int L, int R) {
  int l = 0, r = n - R + 1, ret = 0;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (Hash(L, R, mid))
      l = mid + 1, ret = mid;
    else
      r = mid - 1;
  }
  return ret;
}
void work(int x, int l) {
  if (l == 0) {
    for (int i = 0; i < 26; i++)
      if (i != s[x]) w[x][i]++;
    return;
  }
  int mid = x + len[l - 1], y = x + len[l] - 1;
  if (Hash(x, mid + 1, len[l - 1]) && pd[x][l - 1]) {
    for (int i = 0; i < 26; i++)
      if (i != s[mid] && !(tong[mid - 1][i] - tong[x - 1][i]))
        w[mid][i] += 1ll * len[l] * len[l];
    return;
  } else if (Hash(x, mid + 1, len[l - 1]))
    return;
  int lcp = get_lcp(x, mid + 1);
  if (x + lcp + 1 + get_lcp(x + lcp + 1, mid + lcp + 2) <= mid - 1) return;
  if (pd[x][l - 1] && !(tong[mid - 1][s[mid]] - tong[x - 1][s[mid]]))
    w[mid + 1 + lcp][s[x + lcp]] += 1ll * len[l] * len[l];
  if (pd[mid + 1][l - 1] && !(tong[y][s[mid]] - tong[mid][s[mid]]))
    w[x + lcp][s[mid + 1 + lcp]] += 1ll * len[l] * len[l];
}
int main() {
  scanf("%s", ch + 1);
  n = strlen(ch + 1);
  bit[0] = len[0] = 1;
  for (int i = 1; i <= n; i++) {
    hs[i] = hs[i - 1] * 131 + ch[i] - 'a';
    bit[i] = bit[i - 1] * 131;
    for (int j = 0; j < 26; j++) tong[i][j] = tong[i - 1][j];
    s[i] = ch[i] - 'a';
    tong[i][s[i]]++;
  }
  for (int i = 1; i <= 16; i++) len[i] = len[i - 1] * 2 + 1;
  for (int j = 0; j <= 16; j++)
    for (int i = 1; i <= n; i++)
      if (i + len[j] - 1 <= n) {
        pd[i][j] = check(i, j);
        if (pd[i][j])
          c[i] += 1ll * len[j] * len[j], bs += 1ll * len[j] * len[j],
              c[i + len[j]] -= 1ll * len[j] * len[j];
      }
  for (int i = 1; i <= n; i++) c[i] += c[i - 1];
  for (int j = 0; j <= 16; j++)
    for (int i = 1; i <= n; i++)
      if (i + len[j] - 1 <= n) work(i, j);
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < 26; j++) ans = max(ans, w[i][j] - c[i]);
  printf("%lld\n", ans + bs);
}
