using System;
using System.Linq;
using CompLib.Util;

public class Program
{

    string N;
    int Len;
    public void Solve()
    {
        var sc = new Scanner();
        N = sc.Next();
        Len = N.Length;

        // i桁目、繰り下がりあるか?
        var dp = new long[Len + 1, 2];
        for (int i = 0; i <= Len; i++)
        {
            dp[i, 0] = dp[i, 1] = int.MaxValue;
        }
        {
            int c = N[Len - 1] - '0';
            for (int d = 0; d < 10; d++)
            {
                if (d < c)
                {
                    dp[0, 1] = Math.Min(dp[0, 1], 10 + d - c + d);
                }
                else
                {
                    dp[0, 0] = Math.Min(dp[0, 0], d - c + d);
                }
            }
        }
        for (int i = 1; i < Len; i++)
        {
            int c = N[Len - i - 1] - '0';
            for (int d = 0; d < 10; d++)
            {
                if (d < c)
                {
                    dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 0] + 10 + d - c + d);
                    dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 1] + 10 - 1 + d - c + d);
                }
                else if (d == c)
                {
                    dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 0] + d);
                    dp[i, 1] = Math.Min(dp[i, 1], dp[i - 1, 1] + 9 + d);
                }
                else
                {
                    dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 0] + d - c + d);
                    dp[i, 0] = Math.Min(dp[i, 0], dp[i - 1, 1] + d - 1 - c + d);
                }
            }
        }
        dp[Len, 0] = Math.Min(dp[Len, 0], dp[Len - 1, 0]);
        dp[Len, 0] = Math.Min(dp[Len, 0], dp[Len - 1, 1] + 1);
        Console.WriteLine(dp[Len, 0]);

    }

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

namespace CompLib.Util
{
    using System;
    using System.Linq;

    class Scanner
    {
        private string[] _line;
        private int _index;
        private const char Separator = ' ';

        public Scanner()
        {
            _line = new string[0];
            _index = 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 decimal NextDecimal() => decimal.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();
        public decimal[] DecimalArray() => Array().Select(decimal.Parse).ToArray();
    }
}


Measured memory_bytes: 30432