#include <bits/stdc++.h>
using namespace std;
const int N =1e5+5 ;
const long long MOD = 998244353;
long long power(long long x, long long y) {
long long res = 1;
while(y > 0) {
if(y%2)
res = (res*x) % MOD;
x = (x * x) % MOD;
y >>= 1;
}
return res;
}
vector <int> v[30];
char s[N];
int main() {
scanf("%s",s);
int len = strlen(s);
for(int i=0 ; i<len ; ++i)v[ s[i]-'a' ].push_back(i);
int ans = -1;
for(int i=0 ; i<26 ; ++i){
int siz = v[i].size();
ans = max(ans , siz);
}
for(int i=0 ; i<26 ; ++i){
for(int j=0 ; j<26 ; ++j){
//if(i == j)continue;
vector<int>::iterator it=v[i].begin();;
//int j = 1;
int sum = 0;
//cout << *it <<endl;
while(it != v[i].end()){
//cout << *it <<endl;
int ind = upper_bound(v[j].begin() , v[j].end() , (*it) ) - v[j].begin();
//cout << *ind <<endl;
sum += (ind);
//++j;
++it;
}
ans = max(ans , sum);
}
}
printf("%d\n",ans);
// for(int i=0 ; i<26 ; ++i){
// set<int>::iterator it=st[i].begin();
// int j = 1;
// while(it != st[i].end()){
// for(int k=0 ; k<26 ; ++k){
// if(i==k)continue;
//
// }
// ++j;
// ++it;
// }
//
// }
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9MWU1KzUgOwpjb25zdCBsb25nIGxvbmcgTU9EID0gOTk4MjQ0MzUzOwoKbG9uZyBsb25nIHBvd2VyKGxvbmcgbG9uZyB4LCBsb25nIGxvbmcgeSkgewogICAgbG9uZyBsb25nIHJlcyA9IDE7CiAgICB3aGlsZSh5ID4gMCkgewogICAgICAgIGlmKHklMikKICAgICAgICAgICAgcmVzID0gKHJlcyp4KSAlIE1PRDsKICAgICAgICB4ID0gKHggKiB4KSAlIE1PRDsKICAgICAgICB5ID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKdmVjdG9yIDxpbnQ+IHZbMzBdOwpjaGFyIHNbTl07CgppbnQgbWFpbigpIHsKCiAgICBzY2FuZigiJXMiLHMpOwogICAgaW50IGxlbiA9IHN0cmxlbihzKTsKICAgIGZvcihpbnQgaT0wIDsgaTxsZW4gOyArK2kpdlsgc1tpXS0nYScgXS5wdXNoX2JhY2soaSk7CiAgICBpbnQgYW5zID0gLTE7CgogICAgZm9yKGludCBpPTAgOyBpPDI2IDsgKytpKXsKICAgICAgICBpbnQgc2l6ID0gdltpXS5zaXplKCk7CiAgICAgICAgYW5zID0gbWF4KGFucyAsIHNpeik7CiAgICB9CgoKCiAgICBmb3IoaW50IGk9MCA7IGk8MjYgOyArK2kpewogICAgICAgIGZvcihpbnQgaj0wIDsgajwyNiA7ICsrail7CiAgICAgICAgICAgIC8vaWYoaSA9PSBqKWNvbnRpbnVlOwogICAgICAgICAgICB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQ9dltpXS5iZWdpbigpOzsKICAgICAgICAgICAgLy9pbnQgaiA9IDE7CiAgICAgICAgICAgIGludCBzdW0gPSAwOwogICAgICAgICAgICAvL2NvdXQgPDwgKml0IDw8ZW5kbDsKCiAgICAgICAgICAgIHdoaWxlKGl0ICE9IHZbaV0uZW5kKCkpewogICAgICAgICAgICAgICAgLy9jb3V0IDw8ICppdCA8PGVuZGw7CiAgICAgICAgICAgICAgICBpbnQgaW5kID0gdXBwZXJfYm91bmQodltqXS5iZWdpbigpICwgdltqXS5lbmQoKSAsICgqaXQpICkgLSB2W2pdLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAvL2NvdXQgPDwgKmluZCA8PGVuZGw7CiAgICAgICAgICAgICAgICBzdW0gKz0gKGluZCk7CiAgICAgICAgICAgICAgICAvLysrajsKICAgICAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYW5zID0gbWF4KGFucyAsIHN1bSk7CiAgICAgICAgfQogICAgfQogICAgcHJpbnRmKCIlZFxuIixhbnMpOwoKLy8gICAgZm9yKGludCBpPTAgOyBpPDI2IDsgKytpKXsKLy8gICAgICAgIHNldDxpbnQ+OjppdGVyYXRvciBpdD1zdFtpXS5iZWdpbigpOwovLyAgICAgICAgaW50IGogPSAxOwovLyAgICAgICAgd2hpbGUoaXQgIT0gc3RbaV0uZW5kKCkpewovLyAgICAgICAgICAgIGZvcihpbnQgaz0wIDsgazwyNiA7ICsrayl7Ci8vICAgICAgICAgICAgICAgIGlmKGk9PWspY29udGludWU7Ci8vCi8vICAgICAgICAgICAgfQovLyAgICAgICAgICAgICsrajsKLy8gICAgICAgICAgICArK2l0OwovLyAgICAgICAgfQovLwovLyAgICB9CgogICAgcmV0dXJuIDA7Cn0K