#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef vector<int> vi;
const int maxn = 5005;
int n, ist[2 * maxn][maxn], l0[2 * maxn][maxn], mx[2 * maxn];
string s;
vi p[30];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> s;
n = s.size();
for (int i = 0; i < n; i++)
p[s[i] - 'a'].pb(i);
for (int i = 0; i < n; i++)
for (int j = i; j < n; j++)
ist[i + j][i] = (s[i] == s[j]);
for (int i = 0; i < 2 * n - 1; i++){
int l = -1;
for (int j = 0; j < n; j++){
if (ist[i][j] == 0) l = j;
l0[i][j] = l;
}
}
int ans = 0;
for (int i = 0; i < 2 * n - 1; i++){
int sr = i / 2;
mx[i] = sr - l0[i][sr];
ans += mx[i];
}
int mxdod = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < 26; j++){
if (j == (s[i] - 'a')) continue;
int dod = 0;
for (int k : p[j]){
int sm = i + k;
int sr = sm / 2;
int nov = l0[sm][sr];
if (nov == min(i, k)){
if (nov == 0) nov = -1;
else nov = l0[sm][nov - 1];
}
dod += (sr - nov) - mx[sm];
}
for (int k : p[s[i] - 'a']){
if (k == i) continue;
int sm = i + k;
int sr = sm / 2;
dod -= max(0, min(i, k) - l0[sm][sr]);
}
mxdod = max(mxdod, dod);
if (dod <= 0) continue;
}
}
cout << ans + mxdod << "\n";
return 0;
}