Bytelandian 的内战已经结束。两个 Bytelandian 岛屿决定联合起来,组成 Bytelandia 联合王国。新政府最关心的问题之一是交通。
战前,每个岛屿都有一个完美的交通网络。在任何一个岛屿上,每座城市都可以通过火车到达其他任何城市。连接是双向的。战争期间,一些铁路线被破坏,因此这些线路上的火车停运了。在任何一个岛屿上,停运的火车不超过 15 列。除了恢复中断的火车线路外,政府还必须建立岛屿间的轮渡连接。轮渡将连接每一对城市 $X$ 和 $Y$,前提是 $X$ 和 $Y$ 不在同一个岛屿上。岛屿间的通勤只能通过火车进行。
在 Bytelandia,一切都是二进制的,包括火车和轮渡的票价。一张票的费用要么是 0,要么是 1 个货币单位。政府决定不对战前未中断的火车线路的票价进行任何更改。它将为所有中断的火车线路和所有轮渡线路分配票价。以身为伟大的数学家而自豪的 Bytelandian 人决定设计票价系统,使得对于任何 3 个不同的城市 $X$、$Y$ 和 $Z$,满足:
$C(X, Y) + C(Y, Z) \geq C(X, Z)$
其中 $C(X, Y)$ 是从 $X$ 到 $Y$ 的票价(如果它们属于同一个岛屿,则通过火车;否则通过轮渡)。
你将获得 Bytelandian 岛屿的描述,你的目标是找出一种票价分配方案(如果可能的话)。
输入格式
你的程序将在一个或多个测试用例上进行测试。输入的第一行是一个整数 $T$,表示测试用例的数量($1 \leq T \leq 100$)。接下来是各个测试用例,每个测试用例描述了两个岛屿(一个接一个)。一个岛屿的描述以一行包含一个整数 $C_k$ 开始,表示该岛屿的城市数量,随后是 $C_k$ 行,每行包含 $C_k$ 个字符($1 \leq C_k \leq 100$)。每一行中的第 $j$ 个字符是该岛屿上从城市 $i$ 到城市 $j$ 的火车票价。字符 'x' 表示它是中断的铁路线之一。每个 $C_k \times C_k$ 的表格保证是对称的(对于不同的 $i$ 和 $j$,有 table[i][j] = table[j][i]),每个表格的对角线均为 '0'(对于不同的 $i$,有 table[i][i] = '0'),此外每个表格包含不超过 30 个 'x'(15 列不同的火车,因为每列火车在表格中会被提到两次)。
注意:输入可能包含位于同一岛屿上的 3 个不同城市,且连接这些城市的火车并未中断,而这 3 个城市不满足上述描述的条件。
输出格式
对于每个测试用例,如果无法完成满足上述条件的票价分配,则输出一行 “NO”(不带引号)。否则,打印 “YES”(不带引号),并在第一行之后跟随 $C_1 + C_2$ 行,每行包含 $C_1 + C_2$ 个字符($C_1$ 是第一个岛屿的城市数量,$C_2$ 是第二个岛屿的城市数量)。第 $i$ 行的第 $j$ 个字符是从城市 $i$ 到城市 $j$ 的票价(如果它们属于同一个岛屿,则通过火车;否则通过轮渡)。在输出中,第一个岛屿的城市编号为 $1$ 到 $C_1$(包含),而第二个岛屿的城市编号为 $C_1 + 1$ 到 $C_1 + C_2$(包含)。如果有多个正确的解决方案,打印其中任何一个。
注意:你不能更改输入中给出的票价,且输出表格必须是对称的。
样例
输入 1
2 3 011 10x 1x0 2 01 10 2 0x x0 4 010x 1010 0100 x000
输出 1
YES 01111 10111 11011 11101 11110 NO
Figure 1. The sample input provided in the problem description.