atcoder#ARC089D. [ARC089F] ColoringBalls

[ARC089F] ColoringBalls

配点 : 11001100

問題文

1,2,..,N1,2,..,N の番号のついた NN 個の白いボールがこの順に一列に並んでいます。 シカのAtCoDeerくんはこれらのボールに赤と青で色を塗りたいと考えています。 ただし、最終的に白のままのボールがある可能性もあります。

長さ KK の文字列 ss が与えられます。 AtCoDeerくんは i=1i=1 から i=Ki=K まで順に次の操作を行います。

  • ii 番目の操作: 連続するボールの区間(空でもよい)を一つ選んで、ssii 文字目が r なら赤で、 b なら青でそのボール達を塗る

ただし、既に色が塗られているボールに再度色を塗った場合、色は上書きされます。 また、塗料の都合上 まだ色が塗られていない白いボールを直接青で塗ることはできません。 すなわち、ssii 文字目が b のとき、白いボールを含む区間を選ぶことはできません。

すべての操作が終わったあとにありうるボールの色の列が何通りありうるか求めてください。 答えは大きくなる可能性があるので、 109+710^9+7 で割ったあまりを求めてください。

制約

  • 11 \leq NN \leq 7070
  • 11 \leq KK \leq 7070
  • s|s| == KK
  • ssrb のみからなる
  • N,KN,K は整数

入力

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

NN KK

ss

出力

すべての操作が終わったあとにありうるボールの色の列が何通りあるかを 109+710^9+7 で割ったあまりを出力せよ。

2 2
rb
9

赤をr,青をb,白をwで表すと、最終的にあり得るボールの列は次の 99 通りです。

ww, wr, rw, rr, wb, bw, bb, rb, br

5 2
br
16

白いボールに直接青を塗ることは出来ないので、 11 回目の操作では空の区間を選ぶしかありません。

7 4
rbrb
1569
70 70
bbrbrrbbrrbbbbrbbrbrrbbrrbbrbrrbrbrbbbbrbbrbrrbbrrbbbbrbbrbrrbbrrbbbbr
841634130