#P2407. [SDOI2009] 地图复原

[SDOI2009] 地图复原

Description

很久以前,有一个传说中的“EWF”部族,他们世代生活在一个 N×MN×M 的矩形大地上。虽然,生活的地区有高山、有沼泽,但通过勤劳勇敢,渐渐地,他们在自己的地盘上修筑了一条回路。

后来,“EWF”部族神秘地消失了。不过,考古学家在那片他们曾经生活过的地方找到了一份地图。地图是 N×MN\times M 的矩阵,左上角的坐标为 (0,0)(0, 0),右下角的坐标为 (N,M)(N, M)。矩阵中的每个格子,表示高山、沼泽、平地、房屋或是道路其中之一。如果一个格子表示道路,那么经过这个格子的道路要么是直走,要么是拐弯。如下图,左边2幅表示直走格子的,右边4幅表示需要拐弯的格子。一个表示道路的格子只能表示下列情况之一。

可是,由于地图的年代久远,考古学家虽然能分清一个格子代表的地形,可对于道路的标记,考古学家们只能分清这一格是表示直走的还是拐弯的。现在,他们求助于你,希望你能帮助他们复原这份“EWF”部族的地图。

Input Format

输入文件 recover.in 的第一行包含两个用空格分隔的正整数 NNMM,分别表示地图的高和长。

接下来一个 NNMM 列的矩阵描述地图,矩阵中没有多余字符。

大写 S表示直走的道路,大写 T 表示拐弯的道路,点 . 表示高山、沼泽、平地和房屋。

Output Format

输出文件 recover.out 包含 2N12N-1 行,每行 2M12M-1 个字符,描述了这条回路。

所有第 2i+12i+1 行的 2j+12j+1 个字符为小写字母 o,表示了矩阵的第 ii 行第 jj 列的格子的中心 (i,j)(i, j)

若回路包含了 (i,j)(i, j )(i,j+1)(i, j+1)(i,j+1) (i, j+1)(i,j)(i, j) 的一条路径,则第 2i+12i+1 行的第 2j+22j+2 个字符为减号 -(ASCII 码为 4545);

若回路包含了 (i,j)(i, j)(i+1,j) (i+1, j)(i+1,j)(i+1, j)(i,j)(i, j) 的一条路径,则第 2i+22i+2 行的第 2j+1 2j+1 个字符为竖线 |(ASCII码为 124124)。

其它以上未说明位置上的字符为空格(ASCII 码为 3232)。

输入数据保证至少存在一个合法解,故你的输出应有且仅有一条回路。如果存在多组答案,请输出任意一组。

3 4
TST.
S.TT
TSST

o-o-o o
|   |  
o o o-o
|     |
o-o-o-o

Hint

对于 20%20\% 的数据,有 N10N \le 10

对于 40%40\% 的数据,有 1N,M801 \le N, M \le 80

对于 40%40\% 的数据,输入没有 .,且 N,M>10N, M > 10

对于 100%100\% 的数据,满足 1N,M8001 \le N, M \le 800