-- No.42が普通にわからないのでお茶をにごす -- TLEするかな? import Control.Applicative import Control.Monad import Data.Int (Int64) import Data.Array main = do let x = 111111 t <- readLn let dpsum = solve x (fromIntegral$ (10^10 :: Int64) `div` fromIntegral x) replicateM_ t$ do m <- readLn :: IO Int64 let ans = dpsum ! fromIntegral (m `div` fromIntegral x) print ans solve :: Int -> Int -> Array Int Int solve x maxm = dpsum where dpsum = listArray (0,maxm) [ modPlus (if i == 0 then 0 else dpsum ! (i-1)) (dp ! (9,i)) | i <- [0..maxm] ] dp :: Array (Int,Int) Int dp = listArray ((0,0),(9,maxm)) [ f i j | i <- [0..9], j <- [0..maxm] ] f 0 0 = 1 f 0 _ = 0 f i j = modPlus (dp ! (i-1, j)) (if j >= i then dp ! (i, j-i) else 0) modPlus x y = let z = x + y in if z >= _MOD then z - _MOD else z _MOD = 10^9 + 9