AT_joi2021_yo2_b パンケーキ (Pancake)

题目描述

ビ太郎在一家煎饼店工作。 这家店里最受欢迎的菜单是一座由 $N$ 个煎饼叠成的煎饼塔。店中供应的煎饼有三种口味,分别是 `A`、`B` 和 `C`。 如果煎饼的排列满足以下条件,我们就称其为**好的煎饼塔**: - 所有 `A` 口味的煎饼必须位于 `B` 口味煎饼之上。 - 所有 `A` 口味的煎饼必须位于 `C` 口味煎饼之上。 - 所有 `B` 口味的煎饼必须位于 `C` 口味煎饼之上。 例如,若从上到下口味依次为 `AABBBC`、`ACC`、`BBBB` 的煎饼塔都符合是好煎饼塔的条件,但 `AABABCC` 和 `CA` 则不符合。 ビ太郎可以对煎饼塔进行以下操作: - 操作 $k$ ($2 \leqq k \leqq N$):将铲子插入第 $k$ 个煎饼下,翻转其上方的所有煎饼,即从上到下前 $k$ 个煎饼的顺序被反转。 例如,若煎饼塔的顺序为 `ABCB`,通过执行操作 $2$、操作 $3$ 和操作 $4$,其顺序将变为 `BACB`、`CBAB` 和 `BCBA`。 现在有 $Q$ 盘煎饼塔,给出每一盘煎饼从上到下的口味顺序为字符串 $S_{i,1}S_{i,2}\cdots S_{i,N}$。ビ太郎想通过尽量少的操作次数,让每一盘煎饼塔都变为好煎饼塔。 请编写程序,计算每一盘煎饼塔变为好煎饼塔所需的最少操作次数。

输入格式

输入数据从标准输入中获取: > $N$ $Q$ > $S_1$ > $S_2$ > $\vdots$ > $S_Q$ 其中,$S_i$ ($1 \leqq i \leqq Q$) 是长度为 $N$ 的字符串,表示第 $i$ 盘煎饼塔的口味顺序。

输出格式

输出结果到标准输出,每行表示一盘煎饼塔变为好煎饼塔所需的最少操作次数。

说明/提示

- $2 \leqq N \leqq 13$。 - $1 \leqq Q \leqq 100,000$。 - $S_{i,j}$ 是 `A`、`B`,或 `C` ($1 \leqq i \leqq Q$,$1 \leqq j \leqq N$)。 ### 子任务 1. ($4$ 分) $N \leqq 5$,$Q = 1$。 2. ($10$ 分) $N \leqq 5$。 3. ($60$ 分) $Q = 1$。 4. ($26$ 分) 无其他约束。 ### 样例解释 1. 对于第 1 盘煎饼塔,经过以下 3 次操作可以变为好煎饼塔: - **操作 4** 后顺序为 `BCBAA`。 - **操作 2** 后顺序为 `CBBAA`。 - **操作 5** 后顺序为 `AABBC`。 通过 $2$ 次或更少的操作无法达成,因此输出 $3$。 2. 对于第 2 盘煎饼塔,以下 2 次操作即可: - **操作 5** 后顺序为 `BABCC`。 - **操作 2** 后顺序为 `ABBCC`。 不能通过 1 次或更少的操作实现,因此输出 $2$。 3. 第 3 盘煎饼塔已经是好煎饼塔,无需操作,因此输出 $0$。 注意,有可能存在多盘煎饼塔的初始顺序相同的情况。 **本翻译由 AI 自动生成**