Problem:
Score : 400 points

Problem Statement

Given is a string S consisting of digits from 1 through 9.

Find the number of pairs of integers (i,j) (1 ≤ i ≤ j ≤ |S|) that satisfy the following condition:

Condition: In base ten, the i-th through j-th characters of S form an integer that is a multiple of 2019.

Constraints

1 ≤ |S| ≤ 200000

S is a string consisting of digits from 1 through 9.

Input

Input is given from Standard Input in the following format:

S

Output

Print the number of pairs of integers (i,j) (1 ≤ i ≤ j ≤ |S|) that satisfy the condition.

Sample Input 1

1817181712114

Sample Output 1

3

Three pairs - (1,5), (5,9), and (9,13) - satisfy the condition.

Sample Input 2

14282668646

Sample Output 2

2

Sample Input 3

2119

Sample Output 3

0

No pairs satisfy the condition.

Solution in C (GCC 9.2.1) (judge verdict: Runtime Error)

#include <stdio.h>

#define NUM (2019)
#define SIZE (200000)

int count[NUM];

main()
{
        int n;
        int c;
        int buf[SIZE];
        int md[SIZE + 1];
        int tmp;
        int tens;
        int i, j;
        int res;

        n = 0;
        while((c = getchar()) != EOF) {
                buf[n] = c - '0';
                ++n;
        }

        tmp = 0;
        tens = 1;
        for(i = n - 1; i >= 0; --i) {
                tmp = (buf[i] * tens + tmp) % NUM;
                md[i] = tmp;
                tens = (tens * 10) % NUM;
        }
        md[n] = 0;

        for(i = 0; i <= n; ++i) {
                count[md[i]]++;
        }
        res = 0;
        for(i = 0; i < NUM; ++i) {
                if(count[i] > 0) {
                        res += count[i] - 1;
                }
        }
#if 0
        for(i = 0; i < n; ++i) {
                for(j = i + 1; j <= n; ++j) {
                        if(md[i] == md[j]) {
                                res++;
                        }
                }
//              count[md[i]]++;
        }
        res = count[0];
        for(i = 1; i < NUM; ++i) {
                if(count[i] > 0) {
                        res += count[i] - 1;
                }
        }
#endif
        printf("%d", res);
}