AT_s8pc_2_c 何通りの分割方法がある?
Description
[problemUrl]: https://atcoder.jp/contests/s8pc-2/tasks/s8pc_2_c
$ square1001 $の部分文字列である「$ 1001 $」は、各位の数字の和が$ 1+0+0+1=2 $と非常に少なく、
しかも「1001」を分割しても{$ 1,0,01 $}や{$ 1,001 $}のようにすると和がそれぞれ$ 1+0+1=2,1+1=2 $と非常に少なくなります。
$ 1001 $はとても不思議な数です。それについて、彼は考えてみることにしました。
整数$ n $を分割するとき、その和が$ D $以下にならなければなりません。
ここでいう「分割」の定義は以下のようになります。
- 整数$ N $を文字列と考えられる。これを$ S $と置く。
- $ S $をいくつかのパーツに分ける。
- 例えば「$ "1234567" $」だと{$ "1","234567" $}や{$ "12","34","56","7" $}や{$ "1234567" $}など、というように分けることができる。
- 分けたパーツをそれぞれ数字としてとらえるようにする。
- 例えば、"1234"は$ 1234 $という数字ととらえることができる。
- ただし、各パーツは$ 0 $から始まってもよい。
例えば、「1355」を和が50以下になるように分割する方法は、以下の$ 3 $通りがあります。
分割方法合計1+3+5+51413+5+5231+35+541何通りの分け方があるか数え上げましょう。$ 1,000,000,007 $で割った余りを求めなさい。
- 問題文中の例と同じである。
- 以下の5通りの条件を満たす分け方がある。
分割方法合計2+4+3+91824+3+9362+4+39452+43+95424+3963
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ D $
- $ 1 $ 行目には、分割されるもののもととなる整数 $ N $ が与えられる。
- $ 2 $ 行目には、数の合計の上限 $ D $が与えられる。
Output Format
出力は以下の形式で標準出力に従うこと。
- 分割の通り数を$ 1,000,000,007 $で割った余りを $ 1 $ 行で出力せよ。
Explanation/Hint
### 制約
- $ 1≦N≦{10}^{100} $
- $ 1≦D≦100,000 $
### 小課題
小課題 $ 1 $ \[ $ 10 $ 点 \]
- 解は全て$ 1 $通り以下である。
小課題 $ 2 $ \[ $ 30 $ 点 \]
- $ 1≦N≦10,000,000,000 $を満たす。
小課題 $ 3 $ \[ $ 60 $ 点 \]
- 追加の制約はない。