出题需要构造
题号:NC314666
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小鲨鱼有一个 nm 列的矩阵,他想把每个格子染上 1 \sim n 中的一种颜色。使得存在这么一个整数 k,满足:
\hspace{23pt}\bullet\,任意选择 k 种不同的颜色;
\hspace{23pt}\bullet\,将矩阵中属于这 k 种颜色的格子全部点亮;
\hspace{23pt}\bullet\,矩阵的每一行和每一列都恰好包含 2 个被点亮的格子。
\hspace{15pt}请你构造一个满足条件的 k 和染色方案。如果不存在,输出 \texttt{NO}

\hspace{15pt}形式化地,设染色方案为一个 n\times m 的矩阵 A,其中 A_{i,j} 表示第 i 行第 j 列格子的颜色,且 1\leqslant A_{i,j}\leqslant n。对于任意一个大小为 k,且元素均在 1\sim n 范围内的集合 \Bbb S,定义矩阵 BB_{i,j}=[A_{i,j}\in \Bbb S]。你需要保证对于任意这样的集合 \Bbb S,矩阵 B 的每一行和每一列都恰好有 21

【名词解释】
\hspace{15pt}本题公式中的方括号代表艾弗森括号,具体地,[P] = \begin{cases} 1 & \text{如果 } P \text{ 为真} \\ 0 & \text{如果 } P \text{ 为假} \end{cases}。例如,[1<6]=1[2=3]=0

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqslant T\leqslant 100\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入两个正整数 n,m \left(1\leqslant n,m\leqslant 1000\right),表示矩阵的行数和列数。

\hspace{15pt}除此之外,保证单个测试文件的 n \times m 之和不超过 3 \times 10^6

输出描述:

\hspace{15pt}对于每一组测试数据,如果不存在满足条件的构造,直接输出 \texttt{NO},否则,请参考下方的格式输出:
\hspace{23pt}\bullet\,第一行输出 \texttt{YES}
\hspace{23pt}\bullet\,第二行输出一个正整数 k \left(1\leqslant k\leqslant n\right),表示选择的颜色的数量;
\hspace{23pt}\bullet\,随后 n 行,第 i 行输出 m 个正整数 A_{i,1},A_{i,2},\dots,A_{i,m} \left(1\leqslant A_{i,j}\leqslant n\right),表示你所构造的矩阵第 i 行中各个格子的颜色编号。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3
7 6
2 2
3 3

输出

复制
NO
YES
2
1 1
1 1
YES
2
2 1 3
3 2 1
1 3 2

备注: