#include <bits/stdc++.h>
using namespace std;

typedef long lint;
typedef long long llint;
typedef pair<int, int> pint;
typedef pair<long long, long long> pllint;

// static const int MAX = 1e6;
// static const int NIL = -1;
// static const ll INF = 1<<21;
static const llint MOD = 2019;

bool compPair(const pint& arg1, const pint& arg2) { return arg1.first > arg2.first; }
template<class T> void chmax(T& a, T b) { if (a < b) { a = b; } }
template<class T> void chmin(T& a, T b) { if (a > b) { a = b; } }

int main(void) {
    string s;
    cin >> s;

    llint a = 0, n;
    n = s.size();

    llint dp[n+1][MOD];
    for(int in=0;in<n+1;in++) {
       for(int im=0;im<MOD+1;im++) {
           dp[in][im] = 0;
       }
    }

    llint now;
    for(int in=1;in<=n;in++) {
        now = s.at(in-1)-'0';
        dp[in][now]++;
       for(int im=1;im<=MOD+1;im++) {
           dp[in][(10*im+now)%MOD] += dp[in-1][im];
       }
    }

    cout << dp[n][0] << endl;
    return 0;
}
