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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

#define PAIRS(x) ((ll)(x) * ((ll)(x)-1) / 2)

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    ll ans = 0;

    string s;
    cin >> s;
    s += '.';

    int cnt[3] = {0, 0, 0};

    int a = 0, b = 0, c = 0;
    map<int, int> ab, bc, ca;
    map<pii, int> abc;

    for (char l : s) {
        l == 'a' ? a++ : (ans += PAIRS(a + 1), a = 0);
        l == 'b' ? b++ : (ans += PAIRS(b + 1), b = 0);
        l == 'c' ? c++ : (ans += PAIRS(c + 1), c = 0);

        ab[cnt[0] - cnt[1]]++;
        bc[cnt[1] - cnt[2]]++;
        ca[cnt[2] - cnt[0]]++;
        abc[{cnt[0] - cnt[1], cnt[1] - cnt[2]}]++;

        cerr << cnt[0] << ' ' << cnt[1] << ' ' << cnt[2] << '\n';

        if (l != 'a' && l != 'b') {
            for (auto x : ab) ans += PAIRS(x.second);
            ab.clear();
        }

        if (l != 'b' && l != 'c') {
            for (auto x : bc) ans += PAIRS(x.second);
            bc.clear();
        }

        if (l != 'c' && l != 'a') {
            for (auto x : ca) ans += PAIRS(x.second);
            ca.clear();
        }

        if (l != 'a' && l != 'b' && l != 'c') {
            for (auto x : abc) ans += PAIRS(x.second);
            abc.clear();
        }

        if (l == 'a' || l == 'b' || l == 'c') cnt[l - 'a']++;
    }

    cout << ans << '\n';
}