#P9439. [ICPC 2021 WF] Crystal Crosswind

[ICPC 2021 WF] Crystal Crosswind

Description

你是一个科学团队中的一员,正在开发一种在分子级别上成像晶体结构的新技术。这种技术涉及在晶体表面吹送一股非常微弱的风,并以不同的角度吹送,以便检测边界(通过暴露给风的分子来表示)。这个过程会重复进行,每个吹送方向的边界都会被记录下来。你的团队已经收集到了数据,但是如同大多数应用科学一样,现在真正的工作,即分析工作必须开始。

对于给定的晶体,你将接收到风以不同方向吹送过晶体表面的数据,以及每个风吹过时遇到的所有边界的位置。对于在方向(wx,wyw_x, w_y)吹送的风,边界被定义为位置(x,yx, y),使得一个分子位于(x,yx, y),并且没有分子位于(xwx,ywyx-w_x, y-w_y)。请注意,出于技术原因,wxw_xwyw_y 不一定互质。

这些数据可能无法唯一确定晶体的结构。你必须找到两个与观测数据一致且分子数最少和最多的晶体结构。

例如,在第一个示例输入中,通过给定的风,出现了9个不同的分子。必须有一个在位置(3,33, 3)处的分子,否则(4,24, 2)将成为第三股风的边界。出于类似的原因,必须在位置(4,44, 4)和(5,55, 5)处有分子。不能再有其他分子,因为它们会导致一些风的附加观测结果。

Input Format

输入的第一行包含三个整数 dxd_xdyd_ykk,其中 dxd_xdyd_y1dx,dy1031 \leq d_x, d_y \leq 10^3)是晶体结构的最大尺寸,kk1k101 \leq k \leq 10)是风吹过晶体的次数。

接下来的 kk 行中,每一行都描述了一次吹风的数据。第一对整数 wxw_xwyw_ydxwxdx-d_x \leq w_x \leq d_xdywydy-d_y \leq w_y \leq d_y,但不能同时为零)表示风的方向。然后是一个整数 bb0b1050 \leq b \leq 10^5),表示这股风遇到的边界数量。接下来的 bb 对不同的整数 xxyy1xdx1 \leq x \leq d_x1ydy1 \leq y \leq d_y)表示每个观测到的边界。

你可以假设输入数据与至少一个晶体是一致的,并且没有分子存在于指定尺寸范围之外。

Output Format

输出两个晶体结构的文本表示,两个结构之间用一个空行分隔。每个结构有 dyd_y 行,每行有 dxd_x 个字符,左上角对应位置(1,11, 1)。第一个结构是与观测结果一致的包含最少分子数量的结构,第二个结构是包含最多分子数量的结构。使用 '#' 表示分子存在的位置,使用 '.' 表示分子不存在的位置。

6 6 3
1 1 3 3 1 1 3 2 2
0 2 6 3 1 1 3 2 2 6 4 5 3 4 2
1 -1 4 1 3 2 4 3 5 4 6

..#...
.#.#..
#.#.#.
.#.#.#
..#.#.
...#..

..#...
.#.#..
#.#.#.
.#.#.#
..#.#.
...#..

5 4 2
1 0 6 1 1 4 1 2 2 5 2 2 3 3 4
0 -1 7 1 1 4 1 5 2 2 3 3 4 4 4 5 4

#..#.
.#..#
.#...
..###

##.##
.##.#
.###.
..###