ビ太郎はパンケーキ店で働いている.
この店で最も人気のあるメニューは N 枚のパンケーキが積み重なったパンケーキタワーである.店で作られているパンケーキには 3 種類の味があり,それぞれ A,B,C と呼ぶことにする.
ここで,パンケーキの並び方が次の条件を満たすようになっているパンケーキタワーを良いパンケーキタワーと呼ぶことにする.
A のパンケーキと味 B のパンケーキの組において,味 A のパンケーキが味 B のパンケーキより上にある.A のパンケーキと味 C のパンケーキの組において,味 A のパンケーキが味 C のパンケーキより上にある.B のパンケーキと味 C のパンケーキの組において,味 B のパンケーキが味 C のパンケーキより上にある.
例えば,パンケーキの味がそれぞれ上から順に AABBBC,ACC,BBBB となっているパンケーキタワーはどれも良いパンケーキタワーであるが,AABABCC,CA となっているパンケーキタワーはどれも良いパンケーキタワーではない.
盛り付け担当のビ太郎はパンケーキタワーに対して次の操作を行うことができる.
例えば,パンケーキの味が上から順に ABCB となっているパンケーキタワーに操作 2,操作 3,操作 4 をそれぞれ行った場合,パンケーキの並び方は BACB,CBAB,BCBA となる.
今,Q 皿のパンケーキタワーがあり,i 皿目 (1 ≦ i ≦ Q) のパンケーキタワーはパンケーキの味が上から順に Si,1 Si,2 … Si,N となっている.ビ太郎はそれぞれのパンケーキタワーについて,できる限り少ない回数の操作で良いパンケーキタワーにしたい.
Q 皿のパンケーキタワーの並び方の情報が与えられるので,それぞれのパンケーキタワーについて,良いパンケーキタワーにするのに必要な操作の回数の最小値を求めるプログラムを作成せよ.
A,B,C のいずれかである (1 ≦ i ≦ Q,1 ≦ j ≦ N).
入力は以下の形式で標準入力から与えられる.
N Q
S1
S2
:
SQ
ただし,Si (1 ≦ i ≦ Q) は長さ N の文字列で,その j 文字目 (1 ≦ j ≦ N) は Si,j である.
標準出力に Q 行出力せよ.i 行目 (1 ≦ i ≦ Q) には,i 皿目のパンケーキタワーについて,良いパンケーキタワーにするのに必要な操作の回数の最小値を出力せよ.
5 3 ABCBA CCBAB AAAAA
3 2 0
1 皿目のパンケーキタワーの場合,以下の 3 回の操作を行うことによって良いパンケーキタワーにすることが可能である.
BCBAA となる.CBBAA となる.AABBC となる.2 回以下の操作によって良いパンケーキタワーにすることは不可能であるので,1 行目に 3 を出力する.
2 皿目のパンケーキタワーの場合,以下の 2 回の操作を行うことによって良いパンケーキタワーにすることが可能である.
BABCC となる.ABBCC となる.1 回以下の操作によって良いパンケーキタワーにすることは不可能であるので,2 行目に 2 を出力する.
3 皿目のパンケーキタワーの場合,既に良いパンケーキタワーになっているので操作を行う必要がない.したがって,3 行目に 0 を出力する.
2 5 AC AC AC AC AC
0 0 0 0 0
パンケーキの並び方が同じであるようなパンケーキタワーが複数個存在する場合もあることに注意せよ.
13 1 ABCCABCBACBAA
9
13 4 CCAAACBAAAABB BBBCCBCCCBCBC CCCAAAABBBBBB AABCBCACBACBA
4 6 2 10
情報オリンピック日本委員会作 『第 20 回日本情報オリンピック JOI 2020/2021 二次予選競技課題』