using CompLib.Util;
using System;
using System.Linq;
public class Program
{
    int[] N;
    public void Solve()
    {
        var sc = new Scanner();
        N = sc.Next().Select(c => c - '0').ToArray();
        Array.Reverse(N);

        // i桁目 超えてるか? おつり + 払う
        var dp = new long[N.Length + 1, 2];
        for (int i = 0; i < N.Length; i++)
        {
            for (int j = 0; j <= 9; j++)
            {
                dp[i, 0] = long.MaxValue / 2;
                dp[i, 1] = long.MaxValue / 2;
            }
        }


        for (int i = 0; i < N.Length; i++)
        {
            for (int j = 0; j <= 9; j++)
            {
                if (i == 0)
                {
                    if (j < N[i])
                    {
                        dp[i, 0] = Math.Min(dp[i, 0], 10 + j - N[i] + j);
                    }
                    else
                    {
                        dp[i, 1] = Math.Min(dp[i, 1], j - N[i] + j);
                    }
                }
                else
                {
                    if (j < N[i])
                    {
                        dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 1] + 10 + j - N[i] + j);
                        dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 0] + 9 + j - N[i] + j);
                    }

                    if (j == N[i])
                    {
                        dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 0] + 9 + j - N[i] + j);
                        dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 1] + j);
                    }

                    if (j > N[i])
                    {
                        dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 0] + j + j - (N[i] + 1));
                        dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 1] + j + j - N[i]);
                    }
                }
            }
        }

        dp[N.Length, 1] = Math.Min(dp[N.Length - 1, 0] + 1, Math.Min(dp[N.Length - 1, 1] + 2, dp[N.Length - 1, 1]));
        Console.WriteLine(dp[N.Length, 1]);
    }

    public static void Main(string[] args) => new Program().Solve();
}

namespace CompLib.Util
{
    using System;
    using System.Linq;
    class Scanner
    {
        private int _index;
        private string[] _line;
        const char separator = ' ';

        public Scanner()
        {
            _index = 0;
            _line = new string[0];
        }

        public string Next()
        {
            while (_index >= _line.Length)
            {
                _line = Console.ReadLine().Split(separator);
                _index = 0;
            }
            return _line[_index++];
        }
        public int NextInt() => int.Parse(Next());
        public long NextLong() => long.Parse(Next());
        public double NextDouble() => double.Parse(Next());
        public char NextChar() => Next()[0];
        public char[] NextCharArray() => Next().ToCharArray();

        public string[] Array()
        {
            _line = Console.ReadLine().Split(separator);
            _index = _line.Length;
            return _line;
        }
        public int[] IntArray() => Array().Select(int.Parse).ToArray();
        public long[] LongArray() => Array().Select(long.Parse).ToArray();
        public double[] DoubleArray() => Array().Select(double.Parse).ToArray();
    }
}

Measured memory_bytes: 32864