#include using namespace std::literals::string_literals; using i64 = std::int_fast64_t; using std::cout; using std::cerr; using std::endl; using std::cin; template std::vector make_v(size_t a){return std::vector(a);} template auto make_v(size_t a,Ts... ts){ return std::vector(ts...))>(a,make_v(ts...)); } int main() { std::string s; cin >> s; reverse(begin(s), end(s)); s += '0'; auto dp = make_v(s.size() + 1, 2); for(int i = 0; i < (int)dp.size(); i++) for(int j = 0; j < (int)dp[i].size(); j++) dp[i][j] = 1 << 30; dp[0][0] = 0; std::vector cost = {0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2}; for(int i = 0; i < (int)s.size(); i++) { int d = s[i] - '0'; for(int j = d; j <= 10; j++) { dp[i + 1][0] = std::min(dp[i + 1][0], dp[i][0] + cost[j] + cost[j - d]); if(j != d) dp[i + 1][0] = std::min(dp[i + 1][0], dp[i][1] + cost[j] + cost[j - d]); } for(int j = 0; j <= d; j++) { dp[i + 1][1] = std::min(dp[i + 1][1], dp[i][1] + cost[j] + cost[9 - (d - j)]); dp[i + 1][1] = std::min(dp[i + 1][1], dp[i][0] + cost[j] + cost[9 - (d - j)]); } } printf("%d\n", dp[(int)s.size()][0]); return 0; }