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 Common Lisp (SBCL 2.0.3) (judge verdict: Time Limit Exceeded)

;;(declaim (optimize (speed 0) (safety 3) (debug 3)))
#+sbcl (declaim (sb-ext:unmuffle-conditions sb-ext:compiler-note))
(declaim (optimize (speed 3) (safety 0) (debug 0)))

(declaim (type simple-string *s*))
(defvar *s* (coerce (read-line) 'simple-string))

(declaim (type fixnum *count*))
(defvar *count* 0) ;; *count* <= |S| <= 200000

(dotimes (i (length *s*))
  (let ((prev-mod 0))
    (declare (type fixnum prev-mod)) ;; 0<=prev-mod<=2019
    (loop for j from i to (1- (length *s*)) do
	  ;; calc curr-mod
	  (let ((curr-mod (mod (+ (* prev-mod 10)
				  (the (integer 0 10) (- (char-code (aref *s* j))
				     (char-code #\0))))
			       2019)))
	    (if (zerop curr-mod)
		(incf *count*))
	    (setf prev-mod curr-mod)))))
(princ *count*)