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 Julia (1.4.0) (judge verdict: Accepted)

parseInt(x) = parse(Int, x)
parseBigInt(x) = parse(BigInt, x)
parseFloat(x) = parse(Float64, x)
parseBigFloat(x) = parse(BigFloat, x)
parseMap(x::Array{SubString{String},1}) = map(parseInt, x)
function modpow(x, n, p)
    ans = 1
    while(n!=0)
        if n&1 == 1
            ans = ans*x%p
        end
        x = x*x%p
        n = n>>1
    end
    return ans
end
function main()
    s = readline()
    s = reverse(s)
    p=2019
    d = Dict()


    i10 = 0
    now = 0
    for i in 1:length(s)
        t = parse(Int, s[i])
        now += (modpow(10, i10, p) * t)%p
        now%=p
        i10+=1
        if haskey(d, now)
            d[now]+=1
        else
            d[now]=1
        end
    end

    res = 0
    i10 = 0
    now = 0
    for i in 1:length(s)
        if haskey(d, now)
            res += d[now]
        end
        t = parse(Int, s[i])
        now += (modpow(10, i10, p) * t)%p
        now %= p

        d[now]-=1
        i10+=1
    end
    println(res)



end
main()