atcoder#WTF19B. Multiple of Nine

Multiple of Nine

题目描述

以下の条件を満たす文字列 S S の個数を 109 + 7 10^9\ +\ 7 で割った余りを求めてください。

  • S S の長さはちょうど N N である。
  • S S は数字 (0...9) からなる。
  • Q Q 個の区間が与えられる。各 i (1  i  Q) i\ (1\ \leq\ i\ \leq\ Q) に対し、S[li  ri] S[l_i\ \ldots\ r_i] (S S li l_i 文字目 (先頭を 1 1 文字目とする) から ri r_i 文字目まで (両端含む) の部分文字列) が表す整数は 9 9 の倍数でなければならない。

ここで、文字列 S S やその部分文字列が 0 0 から始まっても構いません。 例えば、002019 は整数 2019 2019 を表します。

输入格式

入力は以下の形式で標準入力から与えられる。

N N Q Q l1 l_1 r1 r_1 : : lQ l_Q rQ r_Q

输出格式

条件を満たす文字列の個数を 109 + 7 10^9\ +\ 7 で割った余りを出力せよ。

题目大意

对满足以下条件的整数序列 SS 计数:

  • 长度为 NN
  • Si[0,9]S_i\in[0,9]
  • 满足 QQ 条限制:(j=liriaj)mod9=0\left(\sum_{j=l_i}^{r_i}a_j\right)\bmod 9 = 0

109+710^9+7 取模。

N109,Q15N\le 10^9,Q\le 15

4
2
1 2
2 4
136
6
3
2 5
3 5
1 3
2720
20
10
2 15
5 6
1 12
7 9
2 17
5 15
2 4
16 17
2 12
8 17
862268030

提示

制約

  • 1  N  109 1\ \leq\ N\ \leq\ 10^9
  • 1  Q  15 1\ \leq\ Q\ \leq\ 15
  • 1  li  ri  N 1\ \leq\ l_i\ \leq\ r_i\ \leq\ N

Sample Explanation 1

例えば、S = S\ = 9072 は条件を満たします。なぜなら、S[1  2] = S[1\ \ldots\ 2]\ = 90S[2  4] = S[2\ \ldots\ 4]\ = 072 がいずれも 9 9 の倍数であるためです。