#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using u64 = unsigned long long;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    map<int, int> m;
    int val = 0;
    vector<int> vs(n+1);
    ll aaa = 1;
    for (int i = n-1; i >= 0; --i) {
        val = (val + (s[i]-'0')*aaa)%2019;
        aaa = (aaa*10)%2019;
        m[val]++;
        vs[i] = val;
    }
    ll ans = 0;
    for (int i = n-1; i >= 0; --i) {
        ans += m[vs[i+1]];
        m[vs[i]]--;
    }
    cout << ans << "\n";
    return 0;
}