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 Rust (1.42.0) (judge verdict: Memory Limit Exceeded)

#![allow(unused_imports)]
use num::integer::gcd;
use proconio::*;
use std::cmp::*;
use std::collections::VecDeque;
use std::ops::*;

fn main() {
   input! {
      s: String,
   }

   let v = s.as_bytes();
   let n = s.len();
   let mut dp = vec![[0;2019]; n+1];
   let mut ans = 0;
   for i in 0..n {
      let a = (v[i] as usize) - 48;
      dp[i+1][a] += 1;
      for j in 0..2019 {
         let x = (j*10 + a) % 2019;
         dp[i+1][x] += dp[i][j];
      }
      ans += dp[i+1][0];
   }
   println!("{}", ans);
}