#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//ABC164D
int compare_lli(const void *a, const void *b) {
  long *A=(long long *) a;
  long *B=(long long *) b;
  if(*A > *B) return 1;
  if(*A < *B) return -1;
  return 0;
}
int main(void) {
  long long n, k, i, cou=0, tmp, len, mod=2019, mte=1, sum=0;

  char s[200000];
  scanf(" %s", s);

  for(len=0; s[len] != '\0'; ++len)
    ; //文字数
  long long m[len + 1];

  m[len - 1]=s[len - 1] - 48;
  m[len]=0;

  for(i=len - 2; i >= 0; i--){
    mte=(mte * 10) % mod;
    m[i]=((s[i] - 48) * mte + m[i + 1]) % mod;
  }

  qsort(m, len + 1, sizeof(long long), compare_lli); //sort

  for(i=0; i <= len; i++){
    if(m[i] == m[i + 1]) cou++;
    else{
      if(cou >= 1) sum+=cou * (cou + 1) / 2;
      cou=0;
    }

    //printf("%d\n",m[i]);
  }
  printf("%lld", sum);
}