#include <bits/stdc++.h>
#define rep(i, z, n) for(int i = z; i < n; i++)
#define all(v) v.begin(), v.end()
typedef long long ll;
const int INF = 1<<29;
using namespace std;

int main(){
    string S;
    cin >> S;
    int n = S.size();
    vector<int> a(n + 1);
   
    for (int i = 1; i <= n; i++){
        a.at(i) = S.at(i - 1) - 48;
    }
    vector<int64_t> T(n + 1);
    vector<int64_t> U(n + 1, 1);
    for(int i = n - 1; i > 0; i--){
        U.at(i) = (U.at(i + 1)*10) % 2019;
    }
    
    T.at(n) = a.at(n);
    for(int i = n - 1; i >= 1; i--){
        T.at(i) = (T.at(i + 1) + a.at(i) * U.at(i)) % 2019;
    }
    
    
    vector<int> b(2020, 0);
    for(int i = 1; i <= n; i++){
        b.at(T.at(i))++;
    }
    b.at(0)++;
    int64_t ans = 0;
    for(int i = 0; i<=2018; i++){
        int x = b.at(i);
        ans += x * (x - 1) / 2;
    }
   
    cout << ans << endl;
}