小红的扫雷游戏
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红最近爱上了扫雷游戏。
所谓扫雷游戏的规则是这样:给定一个n*m的矩阵,每个位置有可能是地雷。如果点击了一个地雷,那么直接被炸死,游戏结束。如果点击的一个位置不是地雷,那么将显示该格子周围 8 个格子中地雷数量的总和。
“周围 8 个格子”的定义:对于一个点 (x,y),其周围 8 个格子的坐标为 ,其中
现在小红拿到了一个 4*4 的矩阵,其中有一些位置已经被翻开。小红想知道,根据现有的信息,有哪些位置一定是雷,有哪些位置一定不是雷?小红希望你能把地图标记上。

输入描述:

输入4行,每行是一个长度为 4 的字符串。
其中字符 '.' 代表该位置的情况未知。
字符是数字代表该位置不是雷,且表示周围点的雷数量。
保证给定的地图一定合法。

输出描述:

对于一个确定的格子,如果是雷则标记为 'X',不是雷则标记为 'O'。
不确定的格子保留字符 '.',已经确定的数字也按数字输出。
示例1

输入

复制
.121
....
....
....

输出

复制
O121
OXOX
....
....

说明

判断依据如下:
根据(0,1)坐标的1,得知它周围4个只有一个雷。然后结合(0,2)坐标的2,得知(1,3)坐标一定是雷。
同理可得出(1,1)坐标一定是雷。根据两个已知的雷就可以判断出前两行其他均不是雷。
示例2

输入

复制
....
..8.
....
....

输出

复制
.XXX
.X8X
.XXX
....

说明

判断依据如下:
由于(1,2)坐标是8,那么该点周围有8个雷,且一共只有8个节点。所以这8个节点一定全部都是雷。