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 PHP (7.4.4) (judge verdict: Accepted)

<?php
$S = trim(fgets(STDIN));
$len = strlen($S) - 1;

$ti = [];
$ti[$len] = (int)$S[$len] % 2019;
$mod_table = [];
$mod_table[$ti[$len]] = 1;
$mod_pow_ten_table = [];
$mod_pow_ten_table[0] = 1;

$ans = 0;
for ($i = $len; $i > 0; $i--) {
    $mod_pow_ten_table[$len - $i + 1] = $mod_pow_ten_table[$len - $i] * 10 % 2019;
    $ti[$i - 1] = ((int)$S[$i - 1] * $mod_pow_ten_table[$len - $i + 1] + $ti[$i]) % 2019;
    $mod_table[$ti[$i - 1]] += 1;
}

foreach ($mod_table as $index => $num) {
    if ($index === 0) {
        $num += 1;
    }
    $ans += $num * ($num - 1) / 2;
}

echo $ans;