#include <bits/stdc++.h>
long long n;
int k, w[25], f[25][15][15], used[25][15][15];
long long dp[25][15][15];
int get(long long n) { return !n ? 0 : get(n / 10) + 1; }
void pre(long long n, int k) {
  while (k) {
    w[k--] = n % 10;
    n = n / 10;
  }
}
std::pair<long long, int> dfs(int x, int p, int d) {
  if (used[x][p][d]) return std::make_pair(dp[x][p][d], f[x][p][d]);
  int td = d;
  if (x == k) {
    if (d == 10) d = w[x];
    if (p == 0)
      dp[x][p][td] = 1, f[x][p][td] = 0;
    else if (p > 0)
      p > d ? (dp[x][p][td] = 1, f[x][p][td] = d - p)
            : (dp[x][p][td] = 2, f[x][p][td] = -p);
    used[x][p][td] = 1;
    return std::make_pair(dp[x][p][td], f[x][p][td]);
  }
  long long s = 0;
  int y = (d == 10 ? w[x] : 9);
  std::pair<long long, long long> lst;
  for (int i = y; i >= 0; i--) {
    lst = dfs(x + 1, std::max(p, i), d);
    s = s + lst.first;
    d = 10 + lst.second;
  }
  dp[x][p][td] = s, f[x][p][td] = lst.second;
  used[x][p][td] = 1;
  return std::make_pair(dp[x][p][td], f[x][p][td]);
}
int main() {
  scanf("%lld", &n);
  if (n == 0) return puts("0"), 0;
  k = get(n);
  pre(n, k);
  printf("%lld\n", dfs(1, 0, 10).first);
  return 0;
}
