#include using namespace std; /* nC2 */ [[nodiscard]] uint64_t comb2(uint64_t n) { //--------Valid Error------------------ if (n < 2ULL) return 0ULL; //------------------------------------- uint64_t retVal; if (n%2) retVal = n*((n-1ULL)/2ULL); else retVal = (n/2ULL)*(n-1ULL); return retVal; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); string S; cin >> S; vector> cco(1, vector(26, 0)); for (const auto &Si: S){ cco.push_back(cco.back()); // 間に合わなかったらwavelet treeにする cco.back().at(Si-'A') += 1; } // 末尾から、これを3文字目としてMMA文字列を作る個数を数える。 uint64_t ans = 0; for(uint i = cco.size()-2; i>=2; i--){ const uint Si = S[i]-'A'; for(uint c = 0; c<26; c++){ if (Si == c) continue; ans += comb2(cco[i][c]); // if (comb2(cco[i][c])) cout << i << ',' << c << ':' << ans << S[i]<