S="0"+eval(input())

dig=len(S)





#dp[i][j]は下からi桁みたときの最小で，jは繰り下がりの有無

#自分が出す:a お釣り:b

inf=10**10

dp=[[inf,inf] for _ in range(dig+1)]

dp[0]=[0,0]



for i in range(dig):

    for j in range(2):

        if i==0 and j==1:

            break

        x=int(S[dig-i-1])

        for a in range(10):

            jj=0#次のj,繰り下がるかどうか

            b=(a-j)-x#j=1なら，繰り下がっているためaが1下がっている

            if b<0:

                b+=10

                jj=1

            dp[i+1][jj]=min(dp[i+1][jj] , dp[i][j]+a+b)

            

print((dp[-1][0]))











def I(): return int(eval(input()))

def MI(): return list(map(int, input().split()))

def LI(): return list(map(int, input().split()))



def main():

    mod=10**9+7

    S="00"+eval(input())

    S=S[::-1]

    N=len(S)-1

    

    def calc(x,nxt):

        # 今見てる数字,次の桁の数字,を受けて

        # 今使う,繰り上がり，を返す



        if x<=4:

            return x,0

        elif x>=6:

            return 10-x,1

        else:

            # 次が5なら，そのあと5以上ががくればお得，そうでなくとも損しない

            if nxt<5:

                return 5,0

            else:

                return 5,1

    

    kuri=0

    ans=0

    for i in range(N):

        now=int(S[i])

        nxt=int(S[i+1])

        now+=kuri

        temp,kuri = calc(now,nxt)

        

        ans+=temp

        

    print(ans)

        



main()

S = "0" + eval(input())
dig = len(S)
# dp[i][j]は下からi桁みたときの最小で，jは繰り下がりの有無
# 自分が出す:a お釣り:b
inf = 10**10
dp = [[inf, inf] for _ in range(dig + 1)]
dp[0] = [0, 0]
for i in range(dig):
    for j in range(2):
        if i == 0 and j == 1:
            break
        x = int(S[dig - i - 1])
        for a in range(10):
            jj = 0  # 次のj,繰り下がるかどうか
            b = (a - j) - x  # j=1なら，繰り下がっているためaが1下がっている
            if b < 0:
                b += 10
                jj = 1
            dp[i + 1][jj] = min(dp[i + 1][jj], dp[i][j] + a + b)
print((dp[-1][0]))

def I():
    return int(eval(input()))


def MI():
    return list(map(int, input().split()))


def LI():
    return list(map(int, input().split()))


def main():
    mod = 10**9 + 7
    S = "00" + eval(input())
    S = S[::-1]
    N = len(S) - 1

    def calc(x, nxt):
        # 今見てる数字,次の桁の数字,を受けて
        # 今使う,繰り上がり，を返す
        if x <= 4:
            return x, 0
        elif x >= 6:
            return 10 - x, 1
        else:
            # 次が5なら，そのあと5以上ががくればお得，そうでなくとも損しない
            if nxt < 5:
                return 5, 0
            else:
                return 5, 1

    kuri = 0
    ans = 0
    for i in range(N):
        now = int(S[i])
        nxt = int(S[i + 1])
        now += kuri
        temp, kuri = calc(now, nxt)
        ans += temp
    print(ans)


main()

-S = "0" + eval(input()) -dig = len(S) -# dp[i][j]は下からi桁みたときの最小で，jは繰り下がりの有無 -# 自分が出す:a お釣り:b -inf = 10**10 -dp = [[inf, inf] for _ in range(dig + 1)] -dp[0] = [0, 0] -for i in range(dig): -    for j in range(2): -        if i == 0 and j == 1: -            break -        x = int(S[dig - i - 1]) -        for a in range(10): -            jj = 0  # 次のj,繰り下がるかどうか -            b = (a - j) - x  # j=1なら，繰り下がっているためaが1下がっている -            if b < 0: -                b += 10 -                jj = 1 -            dp[i + 1][jj] = min(dp[i + 1][jj], dp[i][j] + a + b) -print((dp[-1][0])) +def I(): +    return int(eval(input())) + + +def MI(): +    return list(map(int, input().split())) + + +def LI(): +    return list(map(int, input().split())) + + +def main(): +    mod = 10**9 + 7 +    S = "00" + eval(input()) +    S = S[::-1] +    N = len(S) - 1 + +    def calc(x, nxt): +        # 今見てる数字,次の桁の数字,を受けて +        # 今使う,繰り上がり，を返す +        if x <= 4: +            return x, 0 +        elif x >= 6: +            return 10 - x, 1 +        else: +            # 次が5なら，そのあと5以上ががくればお得，そうでなくとも損しない +            if nxt < 5: +                return 5, 0 +            else: +                return 5, 1 + +    kuri = 0 +    ans = 0 +    for i in range(N): +        now = int(S[i]) +        nxt = int(S[i + 1]) +        now += kuri +        temp, kuri = calc(now, nxt) +        ans += temp +    print(ans) + + +main()