S=input()
INF=10**12
# dp[i][j]: 下からi桁目まで決めた時の、くりさがりがjの時の最小値
# i: 0~N, j:2値, 前の桁でくりさがりが発生している場合に1
dp=[[INF for _ in range(2)] for _ in range(10**6+5)]
S=S[::-1]
S+="0"
N=len(S)
dp[0][0]=0
# 配るDP, 今の状態を見て次の状態を決めていく
for i in range(N):
    for j in range(2):
        # x: i桁目の数字, 前の桁でくりさがりが発生している場合はインクリメント
        x=int(S[i])
        x+=j
        for a in range(10):
            ni=i+1
            nj=0
            b=a-x
            if b<0:
                nj=1
                b+=10
            dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b)
print(dp[N][0]) S=input() S input() input INF=10**12 INF 10**12 10 12 [INF for _ in range(2)] for _ in range(10**6+5) for _ in range(10**6+5) _ range(10**6+5) range 10**6+5 10**6 10 6 5 for _ in range(10**6+5) [INF for _ in range(2)] dp=[[INF for _ in range(2)] for _ in range(10**6+5)] dp [[INF for _ in range(2)] for _ in range(10**6+5)] S=S[::-1] S S[::-1] S ::-1 -1 S+="0" S "0" N=len(S) N len(S) len S dp[0][0]=0 dp[0][0] [0] dp 0 0 0 for i in range(N):
    for j in range(2):
        # x: i桁目の数字, 前の桁でくりさがりが発生している場合はインクリメント
        x=int(S[i])
        x+=j
        for a in range(10):
            ni=i+1
            nj=0
            b=a-x
            if b<0:
                nj=1
                b+=10
            dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b) i range(N) range N for j in range(2):
        # x: i桁目の数字, 前の桁でくりさがりが発生している場合はインクリメント
        x=int(S[i])
        x+=j
        for a in range(10):
            ni=i+1
            nj=0
            b=a-x
            if b<0:
                nj=1
                b+=10
            dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b) j range(2) range 2 x=int(S[i]) x int(S[i]) int S[i] S i x+=j x j for a in range(10):
            ni=i+1
            nj=0
            b=a-x
            if b<0:
                nj=1
                b+=10
            dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b) a range(10) range 10 ni=i+1 ni i+1 i 1 nj=0 nj 0 b=a-x b a-x a x if b<0:
                nj=1
                b+=10
             b<0 b 0 nj=1 nj 1 b+=10 b 10 dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b) dp[ni][nj] [ni] dp ni nj min(dp[ni][nj], dp[i][j]+a+b) min dp[ni][nj] [ni] dp ni nj dp[i][j]+a+b dp[i][j]+a dp[i][j] [i] dp i j a b print(dp[N][0]) print dp[N][0] [N] dp N 0 nj=0 0 nj x=int(S[i]) int(S[i]) x INF=10**12 10**12 INF dp=[[INF for _ in range(2)] for _ in range(10**6+5)] [[INF for _ in range(2)] for _ in range(10**6+5)] dp nj=1 1 nj N=len(S) len(S) N b+=10 10 b ni=i+1 i+1 ni b=a-x a-x b x+=j j x S=input() input() S S=S[::-1] S[::-1] S S+="0" "0" S
S=input()
INF=10**12
# dp[i][j]: 下からi桁目まで決めた時の、くりさがりがjの時の最小値
# i: 0~N, j:2値, 前の桁でくりさがりが発生している場合に1
dp=[[INF for _ in range(2)] for _ in range(10**6+5)]
S=S[::-1]
S+="0"
N=len(S)
dp[0][0]=0
# 配るDP, 今の状態を見て次の状態を決めていく
for i in range(N):
    for j in range(2):
        # x: i桁目の数字, 前の桁でくりさがりが発生している場合はインクリメント
        x=int(S[i])
        x+=j
        for a in range(10):
            ni=i+1
            nj=0
            b=a-x
            if b<0:
                nj=1
                b+=10
            dp[ni][nj]=min(dp[ni][nj], dp[i][j]+a+b)
print(dp[N][0])