#include <bits/stdc++.h>
using namespace std;
long long mirrorScore(const string &s) {
int n = s.size();
// stacks[k] will hold unmarked indices i where s[i] == 'a'+k
vector<vector<int>> stacks(26);
long long score = 0;
for (int i = 0; i < n; i++) {
char c = s[i];
// compute mirror letter
char m = char('z' - (c - 'a'));
int mi = m - 'a';
if (!stacks[mi].empty()) {
// found a mirror-match; use the closest j
int j = stacks[mi].back();
stacks[mi].pop_back();
score += (i - j);
} else {
// no mirror waiting: add this index to its letter-stack
stacks[c - 'a'].push_back(i);
}
}
return score;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string S;
cin >> S;
cout << mirrorScore(S) << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgbWlycm9yU2NvcmUoY29uc3Qgc3RyaW5nICZzKSB7CiAgICBpbnQgbiA9IHMuc2l6ZSgpOwogICAgLy8gc3RhY2tzW2tdIHdpbGwgaG9sZCB1bm1hcmtlZCBpbmRpY2VzIGkgd2hlcmUgc1tpXSA9PSAnYScrawogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBzdGFja3MoMjYpOwogICAgbG9uZyBsb25nIHNjb3JlID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNoYXIgYyA9IHNbaV07CiAgICAgICAgLy8gY29tcHV0ZSBtaXJyb3IgbGV0dGVyCiAgICAgICAgY2hhciBtID0gY2hhcigneicgLSAoYyAtICdhJykpOwogICAgICAgIGludCBtaSA9IG0gLSAnYSc7CgogICAgICAgIGlmICghc3RhY2tzW21pXS5lbXB0eSgpKSB7CiAgICAgICAgICAgIC8vIGZvdW5kIGEgbWlycm9yLW1hdGNoOyB1c2UgdGhlIGNsb3Nlc3QgagogICAgICAgICAgICBpbnQgaiA9IHN0YWNrc1ttaV0uYmFjaygpOwogICAgICAgICAgICBzdGFja3NbbWldLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIHNjb3JlICs9IChpIC0gaik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gbm8gbWlycm9yIHdhaXRpbmc6IGFkZCB0aGlzIGluZGV4IHRvIGl0cyBsZXR0ZXItc3RhY2sKICAgICAgICAgICAgc3RhY2tzW2MgLSAnYSddLnB1c2hfYmFjayhpKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHNjb3JlOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgc3RyaW5nIFM7CiAgICBjaW4gPj4gUzsKCiAgICBjb3V0IDw8IG1pcnJvclNjb3JlKFMpIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQo=