atcoder#ARC119F. [ARC119F] AtCoder Express 3

[ARC119F] AtCoder Express 3

配点: 800800

問題文

AtCoder 鉄道には N+1N+1 個の駅があり、駅には 00 から NN までの番号が付けられています。ここではかつて、各 ii (0iN1)(0 \leq i \leq N-1) に対して駅 ii と駅 i+1i+1 の間を双方向に 11 分で走行する 普通列車 のみが運行されていました。

しかし、ある日鉄道会社は「光速派」と「準急派」の 22 つのグループに分裂し、駅 00 と駅 NN を除く各駅は光速派と準急派のうち片方が管理することになりました。駅 jj (1jN1)(1 \leq j \leq N-1) を管理するグループは文字 cjc_j で表され、A は光速派が、B は準急派が管理すること、? はまだ決まっていないことを表します。駅 00 と駅 NN は重要な駅なので、両方が管理します。

ここで、光速派と準急派は、普通列車に加えて新たに 22 種類の鉄道路線を作ることにしました。

光速列車:光速派が管理する駅の番号を昇順に a0,a1,,asa_0, a_1, \dots, a_s として、各 kk に対して駅 aka_k と駅 ak+1a_{k+1} の間を双方向に 11 分で走行する。

準急列車:準急派が管理する駅の番号を昇順に b0,b1,,btb_0, b_1, \dots, b_t として、各 kk に対して駅 bkb_k と駅 bk+1b_{k+1} の間を双方向に 11 分で走行する。

? の個数を qq として、作られる鉄道路線は 2q2^q 通り考えられます。その中で、KK 分以内の乗車で駅 00 から駅 NN に行けるようになるものは何通りあるでしょうか?これを 109+710^9+7 で割った余りを求めてください。

制約

  • 2N40002 \leq N \leq 4000
  • 1KN+121 \leq K \leq \frac{N+1}{2}
  • N,KN, K は整数
  • c1,c2,,cN1c_1, c_2, \dots, c_{N-1} はそれぞれ AB? のいずれか

入力

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

NN KK

c1c_1c2c_2\cdotscN1c_{N-1}

出力

答えを 109+710^9+7 で割った余りを出力してください。

8 3
A??AB?B
4

ここでは 23=82^3 = 8 通りの鉄道路線がありえますが、そのうち以下の 44 通りについて、33 分以内の乗車で駅 00 から駅 88 に行くことが可能です。

  • 2,3,62, 3, 6 を光速派が管理する場合:駅 05780 \rightarrow 5 \rightarrow 7 \rightarrow 8 と移動する(下図の #1 に対応)
  • 2,32, 3 を光速派が、駅 66 を準急派が管理する場合:駅 05480 \rightarrow 5 \rightarrow 4 \rightarrow 8 と移動する(下図の #2 に対応)
  • 22 を光速派が、駅 3,63, 6 を準急派が管理する場合:駅 03480 \rightarrow 3 \rightarrow 4 \rightarrow 8 と移動する(下図の #4 に対応)
  • 2,3,62, 3, 6 を準急派が管理する場合:駅 01480 \rightarrow 1 \rightarrow 4 \rightarrow 8 と移動する(下図の #8 に対応)

したがって、答えは 44 通りとなります。これを図で表すと、以下のようになります。下図においては、赤色が光速派のみが管理する駅や光速列車の路線、青色が準急派のみが管理する駅や準急列車の路線を表すものとします。

11 6
???B??A???
256

ここでは、28=2562^8 = 256 通りの組み合わせすべてについて、駅 00 から駅 1111 まで 66 分以内の乗車で行くことが可能です。

16 5
?A?B?A?B?A?B?A?
10

以下の図に示される 1010 通りの組み合わせについて、駅 00 から駅 1616 まで 55 分以内の乗車で行くことが可能です。

119 15
????????A?????????????????????????BA????????????????????????AB???????A???????????B?????????????????????????????A??????
313346281

条件を満たすものは 16233103247094511623310324709451 通りありますが、これを 109+710^9 + 7 で割った余りである 313346281313346281 を出力してください。