#include #include #include #include using namespace std; const vector Z = {0,1,2,3,2,1,2,3,3,2,1}; const vector C = {0,1,2,5,6,7}; const vector X = {0,1,2,1,2,3}; #include using namespace std; map memo; int solve_memorec(long long x) { if (x == 0) return 0; if (x < 10) return memo[x] = Z[x]; if (memo.count(x)) return memo[x]; int d = x % 10; long long r = x / 10; int ret = 1e9; for (int i = 0; i < 6; i++) { int cand; if (d + C[i] >= 10) { cand = solve_memorec(r+1) + X[i] + Z[d + C[i] - 10]; } else { cand = solve_memorec(r) + X[i] + Z[d + C[i]]; } ret = min(ret, cand); } return memo[x] = ret; } int main() { long long n; cin >> n; assert(n >= 1); assert(n <= 1000000000000000000LL); cout << solve_memorec(n) << endl; return 0; }