atcoder#AGC033E. [AGC033E] Go around a Circle

[AGC033E] Go around a Circle

配点 : 15001500

問題文

円周が NN 個の点によって NN 等分され、それぞれが赤か青のいずれかで塗られているような円が、 RB からなる長さ MM の文字列 SS をすべての点から生成するとは、以下の条件を満たすことを指します。

  • 円周上の NN 個の点のうち 11 つを任意に選び、その点上に駒を置く。
  • 駒を時計回り、または反時計回りに隣合う点まで動かすことを MM 回繰り返す。
  • このとき最初にどの点を選んだとしても、うまく動かす向きを定めることで、ii 回目に駒が通る円弧の色が SiS_i であるようにできる。

ただし、SiS_iR のとき赤を、B のとき青を指すものとします。 また駒を動かす向きは、最初に選ぶ点ごとに変えられることに注意してください。

実際に RB からなる長さ MM の文字列 SS が与えられます。 円周が NN 等分されている円の各円弧を赤または青のいずれかで塗る 2N2^N 通りの方法のうち、 SS をすべての点から生成するような塗り方の個数を 109+710^9+7 で割ったあまりを求めてください。

ただし、回転して一致するような塗り方も区別して数えます。

制約

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 1M2×1051 \leq M \leq 2 \times 10^5
  • S=M|S|=M
  • SiS_iR または B

入力

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

NN MM

SS

出力

条件を満たすような各円弧の塗り方の個数を 109+710^9+7 で割ったあまりを出力せよ。

4 7
RBRRBRR
2

赤と青が交互に塗られているときのみ条件を満たします。 なので、このケースの答えは 22 となります。

3 3
BBB
4
12 10
RRRRBRRRRB
78