#include <bits/stdc++.h>

#include <iostream>
//#include <algorithm>
// #include <iomanip>
#define ll long long
#define map unordered_map
#define set unordered_set

using namespace std;

const ll MOD = 1000000007;
const ll INF = (1LL << 62);

vector<ll> num_list;

ll dp[200005];

ll fastpow(ll a, ll n, ll mod = MOD) {
  ll res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}

int main() {
  // std::cout << std::fixed << std::setprecision(10);
  string s;
  cin >> s;

  for (auto a : s) {
    num_list.push_back(a - '0');
  }

  ll current_num = 0;
  for (ll i = num_list.size() - 1; i >= 0; i--) {
    ll n = num_list[i];
    ll dg = s.length() - i;

    ll num = fastpow(10, dg - 1, 2019) * n;

    ll total = current_num + num;

    ll am = total % 2019;

    current_num = (current_num + num) % 2019;
    // cout << n << ":" << num << ":" << am << endl;

    ll j = num_list.size() - i;
    dp[j] = am;
  }

  // cout << "--------" << endl;

  map<ll, ll> m;

  ll ans = 0;
  for (ll i = 0; i < num_list.size() + 1; i++) {
    ll am = dp[i];

    // cout << "am:" << am << endl;
    ans += m[am];

    m[am] += 1;
  }
  cout << ans << endl;
}

// 1817181712114
// 18171
//     18171
//         12114
//
//
//

//
//
//
// 2019
//
// 2019 = 673 * 3
//
// 12
//
// 2019
// 4038
// 6057
// 8076
// 10095
// 12114
// 14133
// 16152
// 18171
// 20190
// 22209
// 24228
// 26247
// 28266
// 30285
// 32304
// 34323
// 36342
// 38361
// 40380
// 42399
// 44418
// 46437
// 48456
// 50475
// 52494
// 54513
// 56532
// 58551
// 60570
// 62589
// 64608
// 66627
// 68646
// 70665
// 72684
// 74703
// 76722
// 78741
// 80760
// 82779
// 84798
// 86817
// 88836
// 90855
// 92874
// 94893
// 96912
// 98931
