在棋盘游戏 MPO 中,你在 $n \times n$ 的方格棋盘上通过建造建筑来获得分数。给定棋盘的初始状态,每个单元格由以下 7 种字符之一描述:.mpoMPO:
- 大写字母 M、P、O 分别表示已建造建筑的单元格:大都市(metropolis)、公园(park)或海洋(ocean)。
- 小写字母 m、p、o 分别表示可以建造大都市、公园或海洋的空单元格。
- 点
.表示不能建造任何建筑的空单元格。
每建造一个建筑,你获得 1 分;每有一对相邻(边或角相邻)的大都市-公园结构,或海洋-海洋结构,你获得 1 分。一次移动是指在允许的单元格上建造一个建筑,即将小写字母变为对应的大写字母:m → M,p → P,或 o → O。禁止进行仅能获得 1 分的移动(即增加分数恰好为 1 的移动)。
你的策略很简单:你总是进行得分最高的移动之一。当你无法进行合法移动时(即没有可能的移动能获得至少 2 分时),游戏结束。
你的任务是确定初始分数和最终分数,以及最终的棋盘状态。可以证明,最终状态与我们如何处理得分相同的移动之间的平局无关。
输入格式
第一行包含一个整数 $n$ ($2 \le n \le 10$),表示棋盘的大小。
接下来的 $n$ 行描述初始棋盘。每行包含一个由 $n$ 个字符组成的字符串,字符集为 .mpoMPO。
输出格式
第一行输出两个整数——初始分数和最终分数。 接下来的 $n$ 行应以与输入相同的格式描述最终棋盘。
样例
样例输入 1
4 .pm. Mom. OOm. p..p
样例输出 1
4 13 .PM. MOM. OOm. p..p
说明
初始棋盘有 3 个建筑(一个大都市和两个海洋),并且有一对相邻的海洋,总分为 4。
- 第一步:建造一个海洋,获得 3 分(1 分来自新建筑,2 分来自两对新的相邻海洋)。
- 第二步:建造一个公园,获得 2 分(1 分来自新建筑,1 分来自一对新的大都市-公园)。
- 第三步和第四步(任意顺序):建造两个新的大都市,每个获得 2 分。
最后,还有三个剩余的单元格可以建造建筑,但对其中任何一个进行移动都只能获得 1 分。游戏以 13 分的总分结束(7 个建筑,3 对大都市-公园,3 对海洋-海洋)。