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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <string>

using namespace std;

int main() 
{
    ios::sync_with_stdio(false); cin.tie(nullptr);

    string A, B, C;
    cin >> A >> B >> C;

    int n = (int)A.size();
    long long ans = 0;

    long long start = 0;   
    bool isPrev = false;   
    int needs = 0;       

    for (int i = 0; i < n; i++) 
    {
        
        int a = A[i] - '0';
        int b = B[i] - '0';
        int c = C[i] - '0';

        int d = c - a - b;

        bool valid = true;
        int need = 0, odp = 0;

        if (d == 0) 
        {
            need = 0; odp = 0;

        } 
        else if (d == 1) 
        {
            need = 1; odp = 0;
        } 
        else if (d == -10) 
        {
            need = 0; odp = 1;
        } 
        else if (d == -9) 
        {
            need = 1; odp = 1;  
        } 
        else 
        {
            valid = false;
        }

        if (!valid) 
        {

            isPrev = false;
            start = 0;
            continue;
        }

        if (!isPrev || needs != odp) {
            start = 0; 
        }

        if (odp == 0) {
            start++;
        }

        if (need == 0) {
            ans += start; 
        }

        isPrev = true; 
        needs = need; 
    }

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