1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define iamspeed ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0)

long long aa, bb, cc, amb, bmc, cma, res;
string s;
map<pair<int, int>, long long> a, b, c, ab, bc, ca, abc;

int main()
{
    iamspeed;
    cin >> s;
    for(int i = 0 ; i < s.size() ; i++)
    {
        if(s[i] == 'a') aa++;
        else if(s[i] == 'b') bb++;
        else cc++;
        if((aa && !bb && !cc) || (!aa && bb && !cc) || (!aa && !bb && cc) || (aa == bb && !cc) || (bb == cc && !aa) || (cc == aa && !bb) || (aa == bb && bb == cc)) res++;
        amb = aa - bb;
        bmc = bb - cc;
        cma = cc - aa;
        if(aa != 0) res += a[make_pair(bb, cc)];
        if(bb != 0) res += b[make_pair(cc, aa)];
        if(cc != 0) res += c[make_pair(aa, bb)];
        if(aa != 0 && bb != 0) res += ab[make_pair(cc, amb)];
        if(bb != 0 && cc != 0) res += bc[make_pair(aa, bmc)];
        if(cc != 0 && aa != 0) res += ca[make_pair(bb, cma)];
        if(aa != 0 && bb != 0 && cc != 0) res += abc[make_pair(amb, bmc)];
        a[make_pair(bb, cc)]++; 
        b[make_pair(cc, aa)]++; 
        c[make_pair(aa, bb)]++; 
        ab[make_pair(cc, amb)]++;
        bc[make_pair(aa, bmc)]++;
        ca[make_pair(bb, cma)]++;
        abc[make_pair(amb, bmc)]++;
    }
    cout << res << endl;
}