#201. 覆盖条

覆盖条

题目描述

在一行中有 ww 个单元格,从左到右编号为 1 到 ww。其中有 nn 个红色单元格,mm 个黑色单元格,其余的 (wnm)(w - n - m) 个单元格为白色。

需要使用一些覆盖条来覆盖所有红色单元格。每个覆盖条可以覆盖 kk 个连续的单元格。找到一种方法来覆盖所有红色单元格,并满足以下所有约束:

  • 每个红色单元格都被覆盖条覆盖。
  • 不覆盖任何黑色单元格。
  • 每个单元格最多只能被一个覆盖条覆盖。
  • 使用的覆盖条数量尽可能少。

输入格式

输入包含多个测试用例。第一行包含一个整数 TT,表示测试用例的数量。对于每个测试用例:

  • 第一行包含四个整数 nnmmkkww
    • nn 表示红色单元格的数量;
    • mm 表示黑色单元格的数量;
    • kk 表示每个覆盖条的长度;
    • ww 表示单元格的总数量。
    • 数据范围
      • 1n,m1051 \leq n, m \leq 10^5
      • 1kw1091 \leq k \leq w \leq 10^9
      • n+mwn + m \leq w
  • 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n,表示红色单元格的编号。
    • 数据范围1aiw1 \leq a_i \leq w
  • 第三行包含 mm 个整数 b1,b2,,bmb_1, b_2, \cdots, b_m,表示黑色单元格的编号。
    • 数据范围1biw1 \leq b_i \leq w

保证以下条件:

  • 所有给定的 (n+m)(n + m) 个单元格各不相同。
  • 所有测试用例中 nnmm 的总和不超过 2×1052 \times 10^5

输出格式

对于每个测试用例:

  • 如果可以在满足所有约束的情况下覆盖所有红色单元格,首先输出一行包含一个整数 cc,表示使用的最小覆盖条数量。接下来输出一行包含 cc 个整数 l1,l2,,lcl_1, l_2, \cdots, l_c,其中 lil_i 表示第 ii 个覆盖条的最左单元格编号。
    • 数据范围1liwk+11 \leq l_i \leq w - k + 1
    • 如果有多个答案,可以输出任意一个。
  • 如果无法满足条件,则输出一行 1-1

样例

4
5 2 3 16
7 11 2 9 14
13 5
3 2 4 11
6 10 2
1 11
2 1 2 6
1 5
3
2 1 2 6
1 5
2
4  
6 2 14 9
-1  
2  
1 4
-1