#include <bits/stdc++.h>
using namespace std;
inline long long min(long long x, long long y) { return x < y ? x : y; }
inline long long max(long long x, long long y) { return x > y ? x : y; }
const int Maxn = 1e5 + 5, q = 1e5 + 3;
inline int read() {
  register int res = 0, sign = 1;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  do {
    res = (res << 3) + (res << 1) + (ch ^ 48);
    ch = getchar();
  } while (isdigit(ch));
  return res * sign;
}
int n, num[27][Maxn], f[Maxn][21];
long long val[Maxn][27], sum[Maxn], ans, tot, len[21];
unsigned long long hs[Maxn], pw[Maxn];
bool g[Maxn][21];
char s[Maxn];
int check(int x1, int x2, int l) {
  if (x1 > x2) swap(x1, x2);
  return (hs[x1 + l - 1] - hs[x1 - 1]) * pw[x2 - x1] ==
         (hs[x2 + l - 1] - hs[x2 - 1]);
}
int LCP(int x, int y) {
  if (x > y) swap(x, y);
  int l = 0, r = n - y + 1, mid;
  while (l < r) {
    mid = (l + r >> 1) + 1;
    if (check(x, y, mid))
      l = mid;
    else
      r = mid - 1;
  }
  return l;
}
int judge(int x, int L) {
  if (L == 1) return 0;
  int mid = x + len[L - 1];
  if (g[x][L - 1] || g[mid + 1][L - 1]) {
    int lcp = LCP(x, mid + 1);
    if (lcp >= len[L - 1] ||
        check(x + lcp + 1, mid + 1 + lcp + 1, len[L - 1] - lcp - 1))
      return min(lcp, len[L - 1]);
  }
  return -1;
}
int main() {
  for (int i = 1; i <= 20; i++) len[i] = len[i - 1] << 1 | 1;
  pw[0] = 1;
  for (int i = 1; i <= 100000; i++) pw[i] = pw[i - 1] * q;
  cin >> s + 1;
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++) {
    hs[i] = hs[i - 1] + (s[i] - 'a' + 1) * pw[i];
    for (int j = 1; j <= 26; j++) num[j][i] = num[j][i - 1];
    num[s[i] - 'a' + 1][i]++;
  }
  for (int i = 1; len[i] <= n; i++)
    for (int j = 1; len[i] + j - 1 <= n; j++)
      if ((f[j][i] = judge(j, i)) == len[i - 1] &&
          num[s[j + len[i - 1]] - 'a' + 1][j + len[i] - 1] -
                  num[s[j + len[i - 1]] - 'a' + 1][j - 1] ==
              1) {
        g[j][i] = true;
        sum[j] += len[i] * len[i];
        sum[j + len[i]] -= len[i] * len[i];
        tot += len[i] * len[i];
      }
  for (int i = 1; i <= n; i++) sum[i] += sum[i - 1];
  for (int i = 1; len[i] <= n; i++)
    for (int j = 1; len[i] + j - 1 <= n; j++)
      if (f[j][i] == len[i - 1]) {
        for (int k = 1; k <= 26; k++)
          if (num[k][j + len[i] - 1] - num[k][j - 1] ==
              (k == s[j + len[i - 1]] - 'a' + 1))
            val[j + len[i - 1]][k] += len[i] * len[i];
      } else if (f[j][i] != -1) {
        if (g[j][i - 1])
          if (num[s[j + len[i - 1]] - 'a' + 1][j + len[i] - 1] -
                  num[s[j + len[i - 1]] - 'a' + 1][j - 1] ==
              1 + (s[j + len[i - 1] + 1 + f[j][i]] == s[j + len[i - 1]]))
            val[j + len[i - 1] + 1 + f[j][i]][s[j + f[j][i]] - 'a' + 1] +=
                len[i] * len[i];
        if (g[j + len[i - 1] + 1][i - 1])
          if (num[s[j + len[i - 1]] - 'a' + 1][j + len[i] - 1] -
                  num[s[j + len[i - 1]] - 'a' + 1][j - 1] ==
              1 + (s[j + f[j][i]] == s[j + len[i - 1]]))
            val[j + f[j][i]][s[j + len[i - 1] + 1 + f[j][i]] - 'a' + 1] +=
                len[i] * len[i];
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= 26; j++) ans = max(ans, val[i][j] - sum[i]);
  cout << tot + ans << endl;
  return 0;
}
