atcoder#ARC108D. [ARC108D] AB

[ARC108D] AB

配点 : 600600

問題文

整数 NN44 つの文字 $c_{\mathrm{AA}},c_{\mathrm{AB}},c_{\mathrm{BA}},c_{\mathrm{BB}}$ が与えられます。 ここで、与えられる 44 つの文字はいずれも AB であることが保証されます。

すぬけ君は文字列 ss を持っています。 ss ははじめ AB です。

ss の長さを s|s| と書くことにします。 すぬけ君は以下の 44 種類の操作を任意の順序で 00 回以上行うことができます。

  1. 1i<s,si1 \leq i < |s|, s_{i} = A, si+1s_{i+1} = A なる ii を選んで、ssii 文字目と i+1i+1 文字目の間に cAAc_{\mathrm{AA}} を挿入する。
  2. 1i<s,si1 \leq i < |s|,s_{i} = A, si+1s_{i+1} = B なる ii を選んで、ssii 文字目と i+1i+1 文字目の間に cABc_{\mathrm{AB}} を挿入する。
  3. 1i<s,si1 \leq i < |s|,s_{i} = B, si+1s_{i+1} = A なる ii を選んで、ssii 文字目と i+1i+1 文字目の間に cBAc_{\mathrm{BA}} を挿入する。
  4. 1i<s,si1 \leq i < |s|,s_{i} = B, si+1s_{i+1} = B なる ii を選んで、ssii 文字目と i+1i+1 文字目の間に cBBc_{\mathrm{BB}} を挿入する。

ss の長さが NN になるまで操作を行ったあとの ss としてありうる文字列の個数を 109+710^9+7 で割ったあまりを求めてください。

制約

  • 2N10002 \leq N \leq 1000
  • $c_{\mathrm{AA}},c_{\mathrm{AB}},c_{\mathrm{BA}},c_{\mathrm{BB}}$ は AB

入力

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

NN

cAAc_{\mathrm{AA}}

cABc_{\mathrm{AB}}

cBAc_{\mathrm{BA}}

cBBc_{\mathrm{BB}}

出力

ss の長さが NN になるまで操作を行ったあとの ss としてありうる文字列の個数を 109+710^9+7 で割ったあまりを出力せよ。

4
A
B
B
A
2
  • ss としてありうる文字列は ABABABBB22 通りです。
1000
B
B
B
B
1
  • ss としてありうる文字列は 11 通りです。