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 OCaml (4.10.0) (judge verdict: Accepted)

let m = 2019
let ( +^ ) x y = (x + y) mod m
let ( *^ ) x y = (x * y) mod m
let inv10 = 202

let () =
  let s = read_line () in
  let n = String.length s in
  let a = Array.make 2019 0 in
  let inv = ref 1 in
  let acc = ref 0 in
  a.(0) <- 1;
  for i = 0 to n - 1 do
    inv := inv10 *^ !inv;
    acc := !acc +^ (Char.code s.[i] - Char.code '0') *^ !inv;
    a.(!acc) <- 1 + a.(!acc)
  done;
  Printf.printf "%d\n" @@
  Array.fold_right (fun a -> ( + ) @@ a * (a - 1) / 2) a 0