#include <bits/stdc++.h>
using namespace std;
const int bs = 207;
int n, LG, num[100005][26], a[100005], len[30], ok[100005][30];
long long hsh[100005], pw[100005], val[100005][26], cst[100005], ans, res;
char s[100005];
bool eq(int l1, int l2, int l) {
  int r1 = l1 + l - 1, r2 = l2 + l - 1;
  if (r1 > n || r2 > n)
    return 0;
  else
    return (hsh[r1] - hsh[l1 - 1] * pw[r1 - l1 + 1]) ==
           (hsh[r2] - hsh[l2 - 1] * pw[r2 - l2 + 1]);
}
bool chk(int l, int sz) {
  if (sz == 1) {
    return ok[l][sz] = 1;
  }
  int mid = l + len[sz - 1], r = l + len[sz] - 1;
  if ((num[r][a[mid]] - num[l - 1][a[mid]] == 1) &&
      eq(l, mid + 1, len[sz - 1]) && ok[l][sz - 1] && ok[mid + 1][sz - 1])
    return ok[l][sz] = 1;
  return 0;
}
int gtlcp(int l1, int l2) {
  int l = 0;
  for (int i = LG; i >= 0; i--)
    if (eq(l1 + l, l2 + l, (1 << i))) l += (1 << i);
  return l;
}
void calc(int l, int sz) {
  if (sz == 1) {
    for (int i = 0; i < 26; i++) val[l][i]++;
    return;
  }
  int mid = l + len[sz - 1], r = l + len[sz] - 1;
  if (eq(l, mid + 1, len[sz - 1]) && ok[l][sz - 1] && ok[mid + 1][sz - 1]) {
    for (int i = 0; i < 26; i++)
      if (num[r][i] - num[l - 1][i] == 0)
        val[mid][i] += 1ll * len[sz] * len[sz];
  }
  int l1 = l, l2 = mid + 1, lcp = gtlcp(l1, l2);
  if (lcp >= len[sz - 1] ||
      l1 + lcp + 1 + gtlcp(l1 + lcp + 1, l2 + lcp + 1) < mid)
    return;
  if (ok[l2][sz - 1] && num[r][a[mid]] - num[mid][a[mid]] == 0)
    val[l1 + lcp][a[l2 + lcp]] += 1ll * len[sz] * len[sz];
  if (ok[l1][sz - 1] && num[mid - 1][a[mid]] - num[l - 1][a[mid]] == 0)
    val[l2 + lcp][a[l1 + lcp]] += 1ll * len[sz] * len[sz];
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = pw[0] = 1; i <= n; i++) {
    num[i][a[i] = s[i] - 'a']++;
    for (int j = 0; j < 26; j++) num[i][j] += num[i - 1][j];
    pw[i] = pw[i - 1] * bs;
    hsh[i] = hsh[i - 1] * bs + s[i];
  }
  for (int i = 1; i <= 30; i++)
    if ((len[i] = len[i - 1] * 2 + 1) > n) {
      LG = i - 1;
      break;
    }
  for (int i = 1; i <= LG; i++)
    for (int j = 1; j <= n && j + len[i] - 1 <= n; j++)
      if (chk(j, i))
        ans += 1ll * len[i] * len[i], cst[j] += 1ll * len[i] * len[i],
            cst[j + len[i]] -= 1ll * len[i] * len[i];
  for (int i = 1; i <= n; i++) cst[i] += cst[i - 1];
  for (int i = 1; i <= LG; i++)
    for (int j = 1; j + len[i] - 1 <= n; j++) calc(j, i);
  for (int i = 0; i < 26; i++)
    for (int j = 1; j <= n; j++) res = max(res, val[j][i] - cst[j]);
  printf("%lld\n", ans + res);
  return 0;
}
