{-# OPTIONS_GHC -O2 #-}
import Control.Applicative
import Text.Printf
import Data.List
import Data.Array.Unboxed
import qualified Data.Map as M
import Data.Array.ST
maxN = 100000
f d
= foldl' step 0 . takeWhile (>0) . iterate (`div` 10) where step a x | x `mod` 10 == d = a + 1
| otherwise = a
fseq :: [Int]
fseq = scanl step 0 [1..]
where step s x = s + f 4 x - f 7 x
sums :: UArray Int Int
sums = runSTUArray $ do
a <- newArray (0, maxN) 0 :: ST s (STUArray s Int Int)
cnt <- newArray (0, 20000) 0 :: ST s (STUArray s Int Int)
writeArray cnt 0 1
forM_ (zip [1..maxN] $ tail fseq) $ \(i, s) -> do
pre <- readArray a (i-1)
c <- readArray cnt s
writeArray a i (pre+c)
writeArray cnt s (c+1)
return a
solve :: Int -> Int
solve n = sums ! n
main = do
(_:ws) <- map read . words <$> getContents
forM_ ws $ printf "%d\n" . solve
ey0jIE9QVElPTlNfR0hDIC1PMiAjLX0KaW1wb3J0IENvbnRyb2wuTW9uYWQKaW1wb3J0IENvbnRyb2wuQXBwbGljYXRpdmUKaW1wb3J0IFRleHQuUHJpbnRmCmltcG9ydCBEYXRhLkxpc3QKaW1wb3J0IERhdGEuQXJyYXkuVW5ib3hlZAppbXBvcnQgcXVhbGlmaWVkIERhdGEuTWFwIGFzIE0KaW1wb3J0IENvbnRyb2wuTW9uYWQuU1QKaW1wb3J0IERhdGEuQXJyYXkuU1QKCm1heE4gPSAxMDAwMDAKCmYgOjogSW50IC0+IEludCAtPiBJbnQKZiBkID0gZm9sZGwnIHN0ZXAgMCAuIHRha2VXaGlsZSAoPjApIC4gaXRlcmF0ZSAoYGRpdmAgMTApCiAgd2hlcmUgc3RlcCBhIHggfCB4IGBtb2RgIDEwID09IGQgPSBhICsgMQogICAgICAgICAgICAgICAgIHwgb3RoZXJ3aXNlID0gYQoKZnNlcSA6OiBbSW50XQpmc2VxID0gc2Nhbmwgc3RlcCAwIFsxLi5dCiAgd2hlcmUgc3RlcCBzIHggPSBzICsgZiA0IHggLSBmIDcgeAoKc3VtcyA6OiBVQXJyYXkgSW50IEludApzdW1zID0gcnVuU1RVQXJyYXkgJCBkbwogICAgYSA8LSBuZXdBcnJheSAoMCwgbWF4TikgMCA6OiBTVCBzIChTVFVBcnJheSBzIEludCBJbnQpCiAgICBjbnQgPC0gbmV3QXJyYXkgKDAsIDIwMDAwKSAwIDo6IFNUIHMgKFNUVUFycmF5IHMgSW50IEludCkKICAgIHdyaXRlQXJyYXkgY250IDAgMQogICAgZm9yTV8gKHppcCBbMS4ubWF4Tl0gJCB0YWlsIGZzZXEpICQgXChpLCBzKSAtPiBkbwogICAgICAgIHByZSA8LSByZWFkQXJyYXkgYSAoaS0xKQogICAgICAgIGMgPC0gcmVhZEFycmF5IGNudCBzCiAgICAgICAgd3JpdGVBcnJheSBhIGkgKHByZStjKQogICAgICAgIHdyaXRlQXJyYXkgY250IHMgKGMrMSkKICAgIHJldHVybiBhCgpzb2x2ZSA6OiBJbnQgLT4gSW50CnNvbHZlIG4gPSBzdW1zICEgbgoKbWFpbiA9IGRvCiAgICAoXzp3cykgPC0gbWFwIHJlYWQgLiB3b3JkcyA8JD4gZ2V0Q29udGVudHMKICAgIGZvck1fIHdzICQgcHJpbnRmICIlZFxuIiAuIHNvbHZlCg==