Automatic Cellular Manufacturing 公司刚刚申请了一项用于大规模生产相同零件的新工艺专利。他们的方法使用了一个二维双态细胞网格,每个细胞要么是“空的”,要么是“填充的”。当然,具体的细节是专有的。
最初,网格中的一组细胞被填充,作为要复制的零件的副本。在离散的步骤序列中,网格中的每个细胞通过检查自身及其八个周围邻居的状态来同时更新其状态。如果这九个细胞中有奇数个是填充的,则该细胞在下一个时间步的状态将是填充的,否则将是空的。图 G.1 展示了一个由三个填充细胞组成的简单图案在复制过程中的几个步骤。
图 G.1:复制过程。
然而,该过程中出现了一个错误。在每个更新步骤之后,网格中的一个细胞可能会自发地翻转其状态。例如,图 G.2 展示了如果一个细胞在第一个时间步后翻转其状态,而另一个细胞在第三个时间步后翻转其状态,可能会发生什么。
图 G.2:复制过程中的错误。此图对应样例输入 1。
不幸的是,原始图案已经丢失,只剩下(可能已损坏的)复制结果。你能编写一个程序来确定一个最小的、非空的初始图案,该图案可能导致了给定的最终图案吗?
输入格式
输入的第一行包含两个整数 $w$ ($1 \le w \le 300$) 和 $h$ ($1 \le h \le 300$),其中 $w$ 和 $h$ 是最终图案边界框的宽度和高度。接下来是 $h$ 行,每行包含 $w$ 个字符,给出了最终图案。每个字符要么是 ‘.’(代表空细胞),要么是 ‘#’(代表填充细胞)。第一行、最后一行、第一列和最后一列中至少有一个填充细胞。
输出格式
显示一个最小尺寸的非空图案,该图案可能导致了给定的图案,假设在复制过程的每个阶段,最多有一个细胞自发地改变了状态。图案的尺寸为其边界框的面积。如果存在多个可能的最小尺寸非空起始图案,则接受其中任何一个。使用字符 ‘.’ 表示空细胞,‘#’ 表示填充细胞。使用显示该图案所需的最小行数和列数。
样例
输入 1
10 10 .#...#...# ##..##..## ##.#.##... ##.#.##... .#...##### ...##..#.# ......###. ##.#.##... #..#..#..# ##..##..##
输出 1
.# ##
输入 2
8 8 ##..#.## #.####.# .#.#.#.. .##.#.## .#.#.#.. .##.#.## #..#.### ##.#.##.
输出 2
#### #..# #.## ###.
输入 3
5 4 #.... ..### ..### ..###
输出 3
#