#P1065. 双阶段方案划分

双阶段方案划分

题目描述

某评审系统中有 nn 个候选方案,每个方案都需要经过 mm 个检测阶段。

ii 个方案在第 jj 个检测阶段的评分为 ai,ja_{i,j},所有评分组成一个 nnmm 列的矩阵。

现在需要完成以下两项工作:

  1. 将每个候选方案分配到 R 组或 B 组,并保证两个组中都至少有一个方案。
  2. 选择一个整数 kk,其中 1k<m1\leq k<m,将全部检测阶段分成前后两部分:
    • 11 到第 kk 个检测阶段属于前半部分;
    • k+1k+1 到第 mm 个检测阶段属于后半部分。

划分结果需要同时满足以下条件:

  • 在前半部分中,R 组所有方案的所有评分,都必须严格大于 B 组所有方案的所有评分。
  • 在后半部分中,B 组所有方案的所有评分,都必须严格大于 R 组所有方案的所有评分。

更具体地说:

  • 对任意属于 R 组的方案 xx、属于 B 组的方案 yy,以及任意 1p,qk1\leq p,q\leq k,都应满足 ax,p>ay,qa_{x,p}>a_{y,q}
  • 对任意属于 R 组的方案 xx、属于 B 组的方案 yy,以及任意 k<p,qmk<p,q\leq m,都应满足 ax,p<ay,qa_{x,p}<a_{y,q}

请判断是否存在满足要求的分组方式和阶段切分位置。

如果存在,输出任意一种合法方案。

输入格式

第一行包含一个整数 TT,表示测试数据的组数。

对于每组测试数据:

  • 第一行包含两个整数 n,mn,m,分别表示候选方案数量和检测阶段数量。
  • 接下来 nn 行,每行包含 mm 个整数。
  • ii 行的第 jj 个整数为 ai,ja_{i,j},表示第 ii 个方案在第 jj 个检测阶段的评分。

输出格式

对于每组测试数据:

如果不存在满足要求的方案,输出一行:

NO

如果存在满足要求的方案,首先输出一行:

YES

随后输出一个长度为 nn 的字符串和一个整数 kk

字符串的第 ii 个字符表示第 ii 个方案所属的组:

  • 字符为 R,表示该方案属于 R 组。
  • 字符为 B,表示该方案属于 B 组。

整数 kk 表示前半部分包含前 kk 个检测阶段。

如果存在多种合法答案,输出任意一种即可。

样例

3
3 4
1 3 9 8
8 7 2 1
2 4 7 6
2 3
5 5 5
5 5 5
4 3
9 1 2
8 3 1
1 8 9
2 7 8
YES
BRB 2
NO
YES
RRBB 1

样例说明

第一组测试数据中,将第 22 个方案分入 R 组,将第 11、第 33 个方案分入 B 组,并在第 22 个检测阶段后进行切分。

前两个检测阶段中,R 组的评分为 8,78,7,它们均严格大于 B 组中的评分 1,3,2,41,3,2,4

后两个检测阶段中,B 组的评分为 9,8,7,69,8,7,6,它们均严格大于 R 组中的评分 2,12,1

第二组测试数据中的所有评分均相同,因此无法满足严格大小关系。

第三组测试数据在第 11 个检测阶段后切分,并将前两个方案分入 R 组,后两个方案分入 B 组,可以满足全部条件。

数据范围

  • 1T10001\leq T\leq 1000
  • 2n,m5×1052\leq n,m\leq 5\times 10^5
  • 1ai,j1091\leq a_{i,j}\leq 10^9
  • 对于每组测试数据,n×m106n\times m\leq 10^6
  • 所有测试数据的 n×mn\times m 之和不超过 10610^6