大家都知道你是 TensorFlow 的粉丝。因此,你接受了挑战,要通过两个投影来重现 TensorFlow 的标志。
考虑一个 $n \times m \times h$ 的三维空间,以及两个投影(两个维度分别为 $n \times m$ 和 $n \times h$ 的矩阵,元素为 0 或 1)。你需要计算出一组可能放置在三维空间内的立方体,使得由这些立方体组成的三维物体在光线从左侧和前方照射时,能投射出投影矩阵所指定的阴影。如果无法实现,请直接输出 $-1$。如果可以实现,你必须找到两组解,一组包含最大数量的立方体,另一组包含最小数量的立方体。假设没有重力(立方体放置在三维空间内的确切位置,不需要任何支撑)。我们假设 1 代表阴影,0 代表光线。
如果存在多个这样的解,你必须输出字典序最小的那一个。如果解 $A$ 在第一个与解 $B$ 不同的数字上比 $B$ 小,则称解 $A$ 字典序小于解 $B$。
例如,解 $[(0, 0, 0), (1, 1, 1)]$ 小于 $[(1, 1, 1), (0, 0, 0)]$。
输入格式
第一行包含三个由空格分隔的整数 $n, m, h$ ($1 \le n, m, h \le 100$),表示空间维度。
接下来的 $n$ 行,每行包含 $m$ 个字符,每个字符为 1 或 0,代表阴影区域 (1) 或光照区域 (0),描述了来自前方的投影。
再接下来的 $n$ 行,每行包含 $h$ 个字符,格式同上,描述了来自左侧的投影。
输出格式
输出的第一行应包含一个数字,如果无解则为 $-1$,否则为 $k_{max}$,表示在生成输入给定的两个投影的前提下,我们在空间中可以放置的最大立方体数量。
接下来的 $k_{max}$ 行应包含三元组 $x, y, z$ ($0 \le x < n, 0 \le y < m, 0 \le z < h$),表示在最大立方体数量的解中,字典序最小的那个解所包含的立方体坐标。
如果存在解,则再下一行包含 $k_{min}$,表示在生成输入给定的两个投影的前提下,我们在空间中可以放置的最小立方体数量。
此后,接下来的 $k_{min}$ 行应包含三元组 $x, y, z$ ($0 \le x < n, 0 \le y < m, 0 \le z < h$),表示在最小立方体数量的解中,字典序最小的那个解所包含的立方体坐标。
样例
样例输入 1
5 3 3 111 010 010 010 010 111 100 110 100 100
样例输出 1
14 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 1 0 2 1 0 2 1 1 3 1 0 4 1 0 8 0 0 0 0 1 1 0 2 2 1 1 0 2 1 0 2 1 1 3 1 0 4 1 0
样例输入 2
2 2 2 00 00 11 11
样例输出 2
-1
样例输入 3
2 3 2 101 011 10 11
样例输出 3
6 0 0 0 0 2 0 1 1 0 1 1 1 1 2 0 1 2 1 4 0 0 0 0 2 0 1 1 0 1 2 1
说明
坐标为 $(x, y, z)$ 的立方体会在 $n \times m$ 投影的第 $x$ 行第 $y$ 列,以及 $n \times h$ 投影的第 $x$ 行第 $z$ 列产生阴影(索引从 0 开始)。
TensorFlow 标志