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# (.NET Core 3.1.201) (judge verdict: Accepted)

using System; 
using System.Text;
using System.Collections.Generic;
using System.Collections;
using System.Linq; 
using E = System.Linq.Enumerable; 


class Program {
    static bool[,] cost;
    static void Main(string[] args) {
        //var NK = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
        var S = Console.ReadLine();
        var N = S.Length; 
       // Console.WriteLine(N);
        var mod = 2019;
        var res = new long[2019];
        res[0] = 1;
        
        var ten = 1; 
        long sum = 0;
        //1の倍数の余りを登録
        int num1 = S[N-1] - '0';
        sum += num1;
        res[sum]++;
        long ans = 0;
        for(long i = N -2;i >= 0;i--){
            int num = S[(int)i]- '0';
            ten *= 10;
            ten %= mod;
            sum += ((num*ten)%mod);
            sum %= mod;
            ans += res[sum];
           
            res[sum]++;
        }
        Console.WriteLine(ans);
     }
}