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<bits/stdc++.h>

using namespace std;

int main() {

	// freopen("input.txt", "r", stdin);
	// freopen("output.txt", "w", stdout);

	string s;
	cin >> s;
	int n;
	stringstream ss(s);
	ss >> n;
	if (n < 2019) {
		cout << 0 << '\n';
		return 0;
	}
	if (n == 2019) {
		cout << 1 << '\n';
	}
	int i = 0, j = s.size();
	int cnt = 0;
	for (int i = 0; i < s.size() - 2; ++i) {
		for (int j = s.size(); j > i + 3; --j ) {
			// cout << i << ' ' << j << '\n';
			// cout << s.substr(i, j - i) << '\n';
			stringstream sss(s.substr(i, j - i));
			sss >> n;
			if (!(n % 2019)) cnt++;
		}
	}
	cout << cnt << '\n';
	return 0;
}