#include<bits/stdc++.h>
//#include<unordered_set>
#pragma GCC optimize("Ofast")
using namespace std;
#define int long long
#define die(x) return cout << x << endl, 0
#define FI first
#define SE second
#define all(o) o.begin(), o.end()
#define endl '\n'
#define IOS ios::sync_with_stdio(0), cin.tie(0)
#define FILE freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout)
#define SZ(x) ((int)(x).size())
#define PB push_back
#define PF push_front
#define POB pop_back
#define POF pop_front
#define MP make_pair
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef map<int,int> mpi;
typedef set<int> sti;
typedef vector<pii> vii;
typedef map<pii,int> mpii;
typedef set<pii> stii;
typedef long double ld;
typedef long long ll;
int gcd(int x,int y){ return (!y ? x : gcd(y, x%y)); }
int power(int x, int y) { return (!y ? 1 : power(x, y / 2) * power(x, y / 2) * (y % 2 ? x : 1)); }
int to_int(string sconvert){stringstream geek(sconvert);int xconvert = 0; geek >> xconvert; return xconvert;}
int fastMax(int x, int y) { return (((y-x)>>(32-1))&(x^y))^y; }
int fastMin(int x, int y) { return (((y-x)>>(32-1))&(x^y))^x; }
const int MAXN=2e6+30,MAX_LOG=30,MOD=1e9+7,INF=1e9;
const double PI = acos(-1);
int mod(int x) { return (x % MOD + MOD) % MOD; }
int n, m, q;
int dp[MAXN];
// int parent[MAXN], sz[MAXN], population[MAXN];
// int eu[MAXN], ev[MAXN], ew[MAXN];
// int query_x[MAXN], query_y[MAXN], ans[MAXN], query_order[MAXN];
// void make_set(){
// for(int i=1;i<=n;i++)parent[i]=i;
// for(int i=1;i<=n;i++)sz[i]=1;
// }
// int find_set(int i){
// if(parent[i]==i)return i;
// else return parent[i]=find_set(parent[i]);
// }
// int union_set(int a,int b,int w){
// int x=find_set(a);
// int y=find_set(b);
// if(x==y){
// population[x]+=w;
// return 0;
// }
// if(sz[x]>sz[y])swap(x,y);
// parent[x]=y;
// sz[y]+=sz[x];
// population[y]+=population[x]+w;
// return 1;
// }
// bool compare_queries(int left,int right){
// return query_y[left]<query_y[right];
// }
int max_dig(int num){
int maxdigit = 0;
while (num > 0) {
maxdigit = max(maxdigit, num % 10);
num /= 10;
}
return maxdigit;
}
int MAIN(){
cin>>n;
for (int i = 1; i < 10; i++){
dp[i] = 1;
}
for (int i = 10; i <= n; i++){
dp[i] = 1+dp[i-max_dig(i)];
}
cout<<dp[n];
return 0;
}
int32_t main(){
IOS;
int t=1;
//cin>>t;
while(t--)MAIN();
return 0;
}