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: Time Limit Exceeded)

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <queue>

//#include <bits/stdc++.h>
using namespace std;
#define print(x) cout<<(x)<<endl
#define rep(i, n) for(int i = 0; i < (int)n; i++)
#define ll long long int
#define pb push_back


int main() {
  string s;
  ll tmp, cnt = 0, N, u, t = 18;
  cin >> s;
  N = s.size();
  // 2019の倍数を文字列でくっつけていく
  for(int i = 4; i <= N; i++){
    for(int j = 0; j <= N - i; j++){
      if (i < t) {
        tmp = stoll(s.substr(j, i)); // longlongで足りなくなったらREになる
        if(tmp % 2019 == 0) cnt++;
      } else { // stollが死ぬ場合
        tmp = stoll(s.substr(j, t));
        // cout << i << " " << tmp << endl;
        u = tmp % 2019;
        for(int k = j + t; k < j + i; k++){
          tmp = stoll(s.substr(k, 1));
          // print(tmp);
          u += 10*u + tmp;
          u %= 2019;
        }
        if(u == 0) cnt++;
      }
      
    }
  }
  cout << cnt << endl;
}