#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;im++) {
           dp[in][im] = 0;
       }
    }

    map<llint, llint> mp;
    mp[0] = 1;
    llint now = 0, ten = 1;
    for(int in=1;in<=n;in++) {
        now += ten*(s.at(n-in)-'0');
        now %= MOD;
        ten *= 10;
        ten %= MOD;
        mp[now]++;
    }

    llint ans=0;
    for(auto im:mp) {
        ans += im.second*(im.second-1)/2;
    }
    
    cout << ans << endl;

    return 0;
}
