#arc089d. [arc089_d]ColoringBalls

[arc089_d]ColoringBalls

問題文

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 NN 7070
  • 11 KK 7070
  • s|s| \= KK
  • ssrb のみからなる
  • N,KN,K は整数

入力

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

NN KK ss

出力

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


入力例 1

2 2
rb

出力例 1

9

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

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


入力例 2

5 2
br

出力例 2

16

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


入力例 3

7 4
rbrb

出力例 3

1569

入力例 4

70 70
bbrbrrbbrrbbbbrbbrbrrbbrrbbrbrrbrbrbbbbrbbrbrrbbrrbbbbrbbrbrrbbrrbbbbr

出力例 4

841634130