#P14244. [CCPC 2024 Shandong I] 阻止城堡

[CCPC 2024 Shandong I] 阻止城堡

题目描述

一块有 10910^9 行和 10910^9 列的棋盘上放着 nn 个城堡与 mm 个障碍物。每个城堡或障碍物恰好占据一个格子,且被占据的格子两两不同。两座城堡可以互相攻击,若它们位于同一行或同一列,且它们之间没有障碍物或其它城堡。更正式地,令 (i,j)(i, j) 表示位于第 ii 行第 jj 列的格子,位于 (i1,j1)(i_1, j_1)(i2,j2)(i_2, j_2) 的两座城堡可以互相攻击,若以下条件中有一条成立:

  • i1=i2i_1 = i_2,且对于所有 min(j1,j2)<j<max(j1,j2)\min(j_1, j_2) < j < \max(j_1, j_2),不存在位于 (i1,j)(i_1, j) 的障碍物或城堡。
  • j1=j2j_1 = j_2,且对于所有 min(i1,i2)<i<max(i1,i2)\min(i_1, i_2) < i < \max(i_1, i_2),不存在位于 (i,j1)(i, j_1) 的障碍物或城堡。

找出一种方法,向棋盘上额外添加最少的障碍物,使得任意两座城堡都不能互相攻击。请注意:不能将额外的障碍物放在已经被占据的格子里。

输入格式

有多组测试数据。第一行输入一个整数 TT 表示测试数据组数,对于每组测试数据:

第一行输入一个整数 nn2n2002 \le n \le 200)表示城堡的数量。

对于接下来 nn 行,第 ii 行输入两个整数 rir_icic_i1ri,ci1091 \le r_i, c_i \le 10^9),表示第 ii 座城堡位于第 rir_i 行第 cic_i 列。

接下来的一行输入一个整数 mm0m2000 \le m \le 200)表示障碍物的数量。

对于接下来 mm 行,第 ii 行输入两个整数 rir'_icic'_i1ri,ci1091 \le r'_i, c'_i \le 10^9),表示第 ii 个障碍物位于第 rir'_i 行第 cic'_i 列。

保证被占据的格子两两不同。同时保证所有数据 nn 之和与 mm 之和均不超过 400400

输出格式

对于每组数据:

如果能阻止城堡之间互相攻击,首先输出一行一个整数 kk,表示最少需要额外添加多少障碍物。接下来输出 kk 行,其中第 ii 行包含两个由单个空格分隔的整数 xix_iyiy_i1xi,yi1091 \le x_i, y_i \le 10^9),表示您准备将第 ii 个额外障碍物放在格子 (xi,yi)(x_i, y_i) 里。如果有多种合法答案,您可以输出任意一种。

如果无法阻止城堡之间互相攻击,只要输出一行 -1\texttt{-1}

4
7
1 3
6 6
4 7
2 1
6 3
4 1
2 6
3
3 4
6 4
3 1
2
1 1
2 2
0
3
1 1
1 3
3 3
1
1 2
3
1 1
1 3
2 3
0
2
2 3
4 6
0
1
2 3
-1

提示

第一组样例数据如下图所示。我们只需要添加 22 个额外的障碍物(图中用星星标识),其中一个位于 (2,3)(2, 3),另一个位于 (4,6)(4, 6)

:::align{center} :::