atcoder#ARC108D. [ARC108D] AB

[ARC108D] AB

题目描述

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

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

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

  1. 1  i < s, si 1\ \leq\ i\ <\ |s|,\ s_{i} = A, si+1 s_{i+1} = A なる i i を選んで、s s i i 文字目と i+1 i+1 文字目の間に cAA c_{\mathrm{AA}} を挿入する。
  2. 1  i < s,si 1\ \leq\ i\ <\ |s|,s_{i} = A, si+1 s_{i+1} = B なる i i を選んで、s s i i 文字目と i+1 i+1 文字目の間に cAB c_{\mathrm{AB}} を挿入する。
  3. 1  i < s,si 1\ \leq\ i\ <\ |s|,s_{i} = B, si+1 s_{i+1} = A なる i i を選んで、s s i i 文字目と i+1 i+1 文字目の間に cBA c_{\mathrm{BA}} を挿入する。
  4. 1  i < s,si 1\ \leq\ i\ <\ |s|,s_{i} = B, si+1 s_{i+1} = B なる i i を選んで、s s i i 文字目と i+1 i+1 文字目の間に cBB c_{\mathrm{BB}} を挿入する。

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

输入格式

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

N N cAA c_{\mathrm{AA}} cAB c_{\mathrm{AB}} cBA c_{\mathrm{BA}} cBB c_{\mathrm{BB}}

输出格式

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

题目大意

给出四个大写字母 cAAc_{AA}cABc_{AB}cBAc_{BA}cBBc_{BB} 和一个初始字符串 s=ABs=AB ,每次操作可以选择字符串中相邻的两个字母 sis_isi+1s_{i+1} 并按下列规则在两个字母之间插入一个新的字母。

  • si=As_i=Asi+1=As_{i+1}=A,则在两者之间插入字母 cAAc_{AA}
  • si=As_i=Asi+1=Bs_{i+1}=B,则在两者之间插入字母 cABc_{AB}
  • si=Bs_i=Bsi+1=As_{i+1}=A,则在两者之间插入字母 cBAc_{BA}
  • si=Bs_i=Bsi+1=Bs_{i+1}=B,则在两者之间插入字母 cBBc_{BB}

保证 cAAc_{AA}cABc_{AB}cBAc_{BA}cBBc_{BB} 均为 AABB

求当 ss 的长度被添加至 nn 后,所有可能的字符串共有多少种?

样例一:可能出现的有 ABABABBB

样例二:只可能出现 ABBBB...BBBB 一种。

4
A
B
B
A
2
1000
B
B
B
B
1

提示

制約

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

Sample Explanation 1

- s s としてありうる文字列は ABABABBB2 2 通りです。

Sample Explanation 2

- s s としてありうる文字列は 1 1 通りです。