def main1(n): mod=10**9+7 # n<=pow(10,10**5) """ 2345 1つ目:0,1,2 2つ目:0~9,0~9,0,1,2,3 3つ目:0~9,..,0~9,0,1,2,3,4 4つ目:0~9,...0~9,0,1,2,3,4,5 """ ary=list(map(int,list(str(n)))) m=len(ary) dp0=[[0]*10 for _ in range(m)] # nぴったり dp1=[[0]*10 for _ in range(m)] # n未満 # dp[i][j]:左からi桁目がjであるものの桁積の合計 for i in range(ary[0]):dp1[0][i]=i dp0[0][ary[0]]=ary[0] for i in range(m-1): for j in range(1,10):# 左からi桁目がjのものから for k in range(1,10):# 左からi+1桁目がkのものへ遷移 if j==ary[i]:# ぴったりから if k==ary[i+1]:# ぴったりへ遷移 dp0[i+1][k]+=dp0[i][j]*k dp0[i+1][k]%=mod elif k