你吓到我的马了.jpg
题号:NC201940
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个 的棋盘,棋盘上有很多障碍和一个中国象棋中的马(本题中马的移动方式跟中国象棋中的马完全一致)。
马每次移动首先会选择是上下左右中的某个不被卡马脚(卡马脚的定义在下面)的方向并面朝这个方向,然后再选择跳到左前方或者右前方,其中左前方是前面两格,左边一格的地方,右前方是前面两格,右边一格的地方。
然后马的移动有以下这么几个条件限制:
  1. 马不能跳到障碍上或者跳出棋盘
  2. 当马在某个方向上的前面一个格子有障碍的话,那么我们称马在这个方向上被卡了马脚
现在对于棋盘上的每个点,你需要输出马最少跳几次能跳到这个地方,如果不可能跳到这个地方则输出
-1.

输入描述:

第一行两个正整数  表示棋盘大小
接下来 行,每行一个长度为 的字符串,表示地图
行第 列的格子由第 行的字符串的第 个(从 开始计算)字符决定,若是 则表示是空格子, 表示障碍,
表示马,数据保证马有且只有一个。

输出描述:

输出  行,每行  个数,第  行第  个数表示跳到第  行第  列至少需要几步,如果不可能跳到则输出 
示例1

输入

复制
3 3
.M.
...
.X.

输出

复制
-1 0 -1
-1 -1 -1
1 -1 1