"""

桁dp

dp[v][flag] = v桁目まで見て、状態がflagの場合の数

flag = 0 ←Nと密接している
flag = 1 ←Nから離れているのが確定している

"""

N = input()

dp = [[0]*2 for i in range(len(N))]
mod = 10**9+7

for i in range(len(N)):

    nv = int(N[i])

    if i == 0:
        dp[0][0] = nv
        for j in range(nv):
            dp[0][1] += j

    else:
        dp[i][0] = (dp[i-1][0] * nv) % mod 

        nsum = nv * (nv-1)//2
        dp[i][1] = ( dp[i-1][0] * nsum + dp[i-1][1] * 45 + 45 ) % mod

#print (dp)
print (sum(dp[-1]) % mod)