#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i, n) for (int i = 0; i < n; i++)
vector<ll> data1;
vector<ll> memo;
string s;
ll n;
int dp(int u)
{
    if (memo[u] != 0)
    {
        return memo[u];
    }
    if (u == n)
    {
        return 0;
    }
    int res = 0;
    res = dp(u + 1) + (s[u] - '0') * data1[n - 1 - u];
    memo[u] = res % 2019;
    return memo[u];
}
int main()
{
    cin >> s;
    n = s.size();
    data1.resize(s.size());
    memo.resize(s.size());
    rep(i, n)
    {
        if (i == 0)
        {
            data1[i] = 1;
            continue;
        }
        data1[i] = data1[i - 1] * 10 % 2019;
    }      //0からn-1まで入ったはず。
    dp(0); //0個以上の数字を文字列とした時に、
    rep(i, n)
    {
        //  cout << memo[i] << endl;
    }
    map<ll, ll> h;
    rep(i, n)
    {
        h[memo[i]] += 1;
    }
    h[0] += 1;
    ll count = 0;
    for (auto x : h)
    {
        //cout << x.first << " " << x.second << endl;
        count += x.second - 1;
    }
    cout << count << endl;
}
//カウントするのは同じものが何個あるかと0が何個あるかだけ。