[语言月赛 202411] Enemy

题目描述

$A$ 城和 $B$ 城在城市中激战,战场可以被视为一个 $n$ 行 $m$ 列的方阵。方阵中的每个方格中的信息为如下可能中的一个: - `#`,代表空地。 - `A`,表示一位 $A$ 城的士兵。 - `B`,表示一位 $B$ 城的士兵。 - `H`,表示城墙。 方阵中行从上到下依次编号为 $1\sim n$,列从左到右依次编号为 $1\sim m$。 $A$ 城位于左侧,$B$ 城位于右侧。故对于**每一行**,$A$ 城的士兵全部位于 $B$ 城士兵的左侧。 对于每一行,城墙只可能出现在 $A$ 城士兵与 $B$ 城士兵的中间,即城墙的左侧只可能有 $A$ 城士兵,城墙的右侧只可能有 $B$ 城士兵。且,同一行最多有 $1$ 个方格是城墙。 激战开始,士兵们会根据地形指定战略。对于**每一行**: - 如果该行有城墙,则士兵们会往自己城市方向后撤,在边界处整齐地排列。例如,若这一行初始时为 `#A#AH#B#`,则后撤后这一行变为 `AA##H##B`。 - 否则,双方会进攻。对于人数较少的一方,士兵会全部倒下,从战场中消失。而另一方不会有士兵倒下,并且会冲至对方城市的方向,在边界处整齐地排列。例如,若这一行初始时为 `#A##B#B#`,则进攻后这一行变为 `BB######`。特别地,如果这一行双方人数相等,则这一行所有士兵都会倒下。 随后激战结束。对于每个士兵会**同时**进行如下判断: - 如果他的上方或下方有友方的士兵与他相邻,则他会从战场中消失,否则原地不动。 现在给你初始时的战场局面,请你输出最后战场的组成。

输入输出格式

输入格式


第一行两个整数 $n,m$,表示方阵的行与列。 接下来 $n$ 行,第 $i$ 行一个长度为 $m$ 的字符串 $s_i$,其中第 $j$ 个字符 $s_{i,j}$ 表示第 $i$ 行第 $j$ 列的情况。

输出格式


共 $n$ 行,每行一个长度为 $m$ 的字符串,表示战场最终的情况。其中第 $i$ 行第 $j$ 个字符表示第 $i$ 行第 $j$ 列的情况。

输入输出样例

输入样例 #1

5 8
#A#AH#B#
#A##B#B#
##AA##BB
AAA###BB
AAA#ABBB

输出样例 #1

AA##H##B
BB######
########
########
####A###

输入样例 #2

3 2
#A
##
#A

输出样例 #2

#A
##
#A

输入样例 #3

3 3
AAB
A#B
ABB

输出样例 #3

#AA
###
BB#

说明

### 样例 #1 解释 激战结束后,战场的情况为 ```cpp AA##H##B BB###### ######## #####AAA ####AAAA ``` 右下角的 `A` 中,除了第 $5$ 行第 $5$ 列的 `A` 以外,下方或者上方都存在友方的士兵,故他们最终从战场中消失。最后战场如样例输出所示。 ### 样例 #2 解释 注意只有在上方或下方有**相邻**的友方士兵时士兵才会从战场消失。 ### 数据范围 对于所有数据,$1\le n,m\le 1000$,$s_{i,j}$ 为 `A`、`B`、`H`、`#` 中的一个,且每一行满足题目中的限制。具体测试点限制如下: | 测试点编号 | $n$ 的范围 | $m$ 的范围 | 特殊性质 | | :-----------: | :-----------: | :-----------: | :-----------: | | $1\sim 3$ | $n=1$ | $m\le100$ | 无 | | $4\sim 6$ | $n\le100$ | $m=1$ | 无 | | $7\sim 10$ | $n\le 100$ | $m\le100$ | $s_{i,j}$ 不为 `H` | | $11\sim 14$ | $n\le 100$ | $m\le100$ | $s_{i,j}$ 不为 `B`| | $15,16$ | $n\le100$ | $m\le 100$ | 无 | | $17\sim 20$ | $n\le 1000$ | $m\le1000$ | 无 |