#include <bits/stdc++.h>
using namespace std;
char A[1 << 17];
int R[17][1 << 17];
int P[17][1 << 17][2];
char C[17][1 << 17][2];
int M[17][1 << 17][2];
string S[17][1 << 17][2];
long long V[26][1 << 17];
long long Z[1 << 17];
int f(int level, int left, int a, int right, int b) {
  int i;
  for (i = (0); i < (level + 1); ++i)
    if (S[level][left][a][i] != S[level][right][b][i] &&
        S[level][left][a][i] != ' ' && S[level][right][b][i] != ' ')
      return i;
  return -1;
}
int main() {
  scanf("%s", A);
  int n = strlen(A);
  long long res = 0;
  int len = 1;
  int level = 1;
  int i, j, k;
  memset(R, -1, sizeof(R));
  memset(Z, 0, sizeof(Z));
  memset(V, 0, sizeof(V));
  for (i = (0); i < (n); ++i) {
    R[0][i] = 0;
    S[0][i][0] = string(1, A[i]);
    M[0][i][0] = 1 << (A[i] - 'a');
  }
  while (len < n) {
    for (j = len; j < n - len; ++j) {
      R[level][j] = -1;
      int l = j - (len + 1) / 2;
      int r = j + (len + 1) / 2;
      int m = 1 << (A[j] - 'a');
      if (R[level - 1][l] != -1 && R[level - 1][r] != -1 &&
          R[level - 1][r] * R[level - 1][l] == 0) {
        int s = R[level - 1][l] + R[level - 1][r];
        if (s == 0) {
          int pos = f(level - 1, l, 0, r, 0);
          if (pos == -1) {
            if ((M[level - 1][l][0] & m) == 0) {
              R[level][j] = 0;
              S[level][j][0] = S[level - 1][l][0] + string(1, A[j]);
              M[level][j][0] = M[level - 1][l][0] | m;
            } else {
              R[level][j] = 1;
              S[level][j][0] = S[level - 1][l][0] + string(1, ' ');
              M[level][j][0] = M[level - 1][l][0];
              P[level][j][0] = j;
              C[level][j][0] = ' ';
            }
          } else if (pos == level - 1) {
            R[level][j] = 0;
            if ((M[level - 1][l][0] & m) == 0) {
              S[level][j][R[level][j]] = S[level - 1][l][0] + string(1, A[j]);
              P[level][j][R[level][j]] = r;
              C[level][j][R[level][j]] = A[l];
              M[level][j][R[level][j]] = M[level - 1][l][0] | m;
              ++R[level][j];
            }
            if ((M[level - 1][r][0] & m) == 0) {
              S[level][j][R[level][j]] = S[level - 1][r][0] + string(1, A[j]);
              P[level][j][R[level][j]] = l;
              C[level][j][R[level][j]] = A[r];
              M[level][j][R[level][j]] = M[level - 1][r][0] | m;
              ++R[level][j];
            }
            if (R[level][j] == 0) R[level][j] = -1;
          }
        } else {
          R[level][j] = 0;
          if (R[level - 1][l] == 0 && (M[level - 1][l][0] & m) == 0)
            for (k = (0); k < (R[level - 1][r]); ++k)
              if (f(level - 1, l, 0, r, k) == -1) {
                S[level][j][R[level][j]] = S[level - 1][l][0] + string(1, A[j]);
                P[level][j][R[level][j]] = P[level - 1][r][k];
                C[level][j][R[level][j]] =
                    C[level - 1][r][k] == ' ' ? A[l] : C[level - 1][r][k];
                M[level][j][R[level][j]] = M[level - 1][l][0] | m;
                ++R[level][j];
              }
          if (R[level - 1][r] == 0 && (M[level - 1][r][0] & m) == 0)
            for (k = (0); k < (R[level - 1][l]); ++k)
              if (f(level - 1, l, k, r, 0) == -1) {
                S[level][j][R[level][j]] = S[level - 1][r][0] + string(1, A[j]);
                P[level][j][R[level][j]] = P[level - 1][l][k];
                C[level][j][R[level][j]] =
                    C[level - 1][l][k] == ' ' ? A[r] : C[level - 1][l][k];
                M[level][j][R[level][j]] = M[level - 1][r][0] | m;
                ++R[level][j];
              }
          if (R[level][j] == 0) R[level][j] = -1;
        }
      }
      long long t = 2 * len + 1;
      t *= t;
      if (R[level][j] == 0) {
        res += t;
        Z[0] += t;
        Z[j - len] -= t;
        Z[j + len + 1] += t;
        Z[n] -= t;
      }
      if (R[level][j] == 0 || (R[level][j] == 1 && C[level][j][0] == ' ')) {
        for (k = (0); k < (26); ++k)
          if ((M[level][j][0] & (1 << k)) == 0) V[k][j] += t;
      }
      if (R[level][j] > 0 && C[level][j][0] != ' ')
        for (k = (0); k < (R[level][j]); ++k)
          V[C[level][j][k] - 'a'][P[level][j][k]] += t;
    }
    len = 2 * len + 1;
    ++level;
  }
  long long sum = 0;
  for (i = (0); i < (n); ++i) {
    sum += Z[i];
    for (j = (0); j < (26); ++j) res = max(res, sum + V[j][i]);
  }
  printf("%lld\n", res + n);
  return 0;
};
