#include <bits/stdc++.h>
using namespace std;
void pri(long long t) { cerr << t; }
void pri(string t) { cerr << t; }
void pri(char t) { cerr << t; }
void pri(long double t) { cerr << t; }
void pri(double t) { cerr << t; }
void pri(unsigned long long t) { cerr << t; }
template <class T, class V>
void pri(pair<T, V> p);
template <class T>
void pri(vector<T> v);
template <class T>
void pri(set<T> v);
template <class T, class V>
void pri(map<T, V> v);
template <class T>
void pri(multiset<T> v);
template <class T, class V>
void pri(pair<T, V> p) {
  cerr << "{";
  pri(p.ff);
  cerr << ",";
  pri(p.ss);
  cerr << "}";
}
template <class T>
void pri(vector<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void pri(set<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void pri(multiset<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T, class V>
void pri(map<T, V> v) {
  cerr << "[ ";
  for (auto i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  string s;
  cin >> s;
  long long n = s.length();
  long long ans = 0;
  for (long long i = 0; i < n; i++) {
    if ((s[i] - '0') % 4 == 0) ans++;
  }
  for (long long i = 1; i < n; i++) {
    if (((s[i - 1] - '0') * 10 + s[i] - '0') % 4 == 0) {
      ans += i;
    }
  }
  cout << ans;
}
