#CF1738G. 反递增爱好者

反递增爱好者

反递增爱好者

  • 时间限制:2 秒
  • 内存限制:512 MiB

题目描述

给定一个 n×nn\times n 的网格。用 (i,j)(i,j) 表示第 ii 行第 jj 列的格子。输入会说明每个格子是否允许删除。

你需要恰好删除 (n−k+1)2(n-k+1)^2 个格子,使未删除的格子中不存在长度为 kk 的严格递增序列。也就是说,不能找到

(x1,y1),(x2,y2),…,(xk,yk),(x_1,y_1),(x_2,y_2),\ldots,(x_k,y_k),

使得对每个 1≤i<k1\le i<k 都有 xi<xi+1x_i<x_{i+1} 且 yi<yi+1y_i<y_{i+1}。

请输出任意一种合法删除方案;若不存在,输出无解。

输入格式

第一行一个整数 tt,表示测试数据组数。

每组数据的第一行包含两个整数 n,kn,k。随后 nn 行,每行一个长度为 nn 的二进制串 sis_i:

  • si,j=1s_{i,j}=1 表示格子 (i,j)(i,j) 允许删除;
  • si,j=0s_{i,j}=0 表示格子 (i,j)(i,j) 必须保留。

输出格式

对每组数据:

  • 若无解,输出一行 NO;
  • 否则输出一行 YES,再输出 nn 行长度为 nn 的二进制串。输出串中的 0 表示删除该格子,1 表示保留该格子。

YES 与 NO 不区分大小写。

样例输入

4
2 2
10
01
4 3
1110
0101
1010
0111
5 5
01111
10111
11011
11101
11110
5 2
10000
01111
01111
01111
01111

样例输出

YES
01
11
YES
0011
1111
1111
1100
NO
YES
01111
11000
10000
10000
10000

数据范围

对所有数据,1≤t≤1051\le t\le10^5,2≤k≤n≤10002\le k\le n\le1000,且所有测试数据中 n2n^2 的总和不超过 10610^6。

子任务编号 分值 特殊限制
1 20 每组 n≤4n\le4
2 每组 k=nk=n
3 每组 n≤60n\le60
4 40 无特殊限制

说明

输出中的 0 必须对应输入中允许删除的格子,并且每组数据必须恰好输出 (n−k+1)2(n-k+1)^2 个 0。

本题为多解构造题,评测器会直接验证输出方案,不要求与样例输出相同。