#include <iostream>
#include <string>
#include <map>
#include <set>
#include <cstdlib>
using namespace std;
 
int main(){
  int count=0;
  long mod=0;
  string s;
  cin >> s;
  int flag[2019];
  
  int sz=s.size();
  for(int i=0; i<2019; i++){
    flag[i]=0;
  }
  flag[0]=1;
  long val=0;
  // long mod calc
  for (int leftmost=0; leftmost<sz; leftmost++) {
    mod=0;
    for (int pos=leftmost; pos<sz; pos+=8) {
      if (sz-pos>8){
        val=atoi(s.substr(pos, 8).c_str());
        mod=mod*1e8+val;
//        cout << val;
      }else{
        val=atoi(s.substr(pos, sz-pos).c_str());
        if (val>=1e7) {
          mod=mod*1e8+val;
        } else if (val>=1e6) {
          mod=mod*1e7+val;
        } else if (val>=1e5) {
          mod=mod*1e6+val;
        } else if (val>=1e4) {
          mod=mod*1e5+val;
        } else if (val>=1e3) {
          mod=mod*1e4+val;
        } else if (val>=1e2) {
          mod=mod*1e3+val;
        } else if (val>=1e1) {
          mod=mod*1e2+val;
        } else if (val>0){
          mod=mod*10+val;
        } else {
          mod=mod+val;
        }
      }
      mod=mod%2019;     
    }
    mod=mod%2019;      
    flag[mod]++;
  }
  for(int i=0; i<2019; i++){
    if(flag[i]>=2){
      count +=(flag[i] * (flag[i]-1)) /2;
    }
  }
  cout << count << endl;
  return 0;
}

