def f(n): dp = [0]*(20*10*2) def csv(i,j,k): return i*10*2 + j*2 + k dp[csv(19,0,0)]=1 for i in range(19, 0, -1): d = n//(10**(i-1))%10 left = 0 left2 = 0 tmp = 0 for k in range(10): dp[csv(i-1,k,1)]+=dp[csv(i,k,1)]*(k+1)+left left += dp[csv(i,k,1)] dp[csv(i-1,k,1)]+=dp[csv(i,k,0)]*tmp if k