#P4303. 「ROIR 2019 Day2」配对

「ROIR 2019 Day2」配对

题目描述

译自 ROI Regional 2019 Day2 T4. Разбиение на пары

宇宙考古学家在邻近星系的一颗行星上发现了 nn 件古代文物,并将它们编号为 11 到 nn。每件文物有 kk 个不同的参数,每个参数都是一个整数。文物 ii 的参数为 ai,1,ai,2,…,ai,ka_{i, 1}, a_{i, 2}, \ldots, a_{i, k}。发现所有文物的第一个参数都是不同的:对于所有 i≠ji \neq j,都有 ai,1≠aj,1a_{i, 1} \neq a_{j, 1},但其他参数可能相同。

科学家们还发现了一段文字,根据这段文字,要激活文物,需要将它们按特定方式配对。配对是有效的,如果对于每个参数 tt 从 11 到 kk,可以选择一个数 btb_{t},使其在每对文物的第 tt 个参数值之间。也就是说,如果文物 ii 和 jj 配对,必须满足 ai,t≤bt≤aj,ta_{i, t} \leq b_{t} \leq a_{j, t} 或 ai,t≥bt≥aj,ta_{i, t} \geq b_{t} \geq a_{j, t}。

现在,科学家们想知道这段文字是否解读正确。为此,需要检查是否存在有效的配对方式,使得每个文物恰好属于一个配对。

编写一个程序,根据文物的参数描述,确定是否可以将它们有效配对。如果可以,输出配对方式。

输入格式

第一行包含两个整数 nn 和 kk(2≤n≤2⋅1052 \leq n \leq 2 \cdot 10^5,nn 为偶数,1≤k≤71 \leq k \leq 7),表示文物数量和参数数量。

接下来的 nn 行中,每行包含 kk 个整数 ai,1,ai,2,…,ai,ka_{i, 1}, a_{i, 2}, \ldots, a_{i, k}(−109≤ai,j≤109-10^9 \leq a_{i, j} \leq 10^9,所有 ai,1a_{i, 1} 都不同),表示文物的参数。

输出格式

如果不存在有效的配对方式,输出 NO。

否则,第一行输出 YES。接下来输出 n/2n / 2 行,每行包含两个整数,表示配对的文物编号。每个文物只能出现一次。

如果存在多个有效的配对方式,可以输出任意一个。

6 2
8 6
1 5
6 3
3 1
4 7
7 2
YES
1 4
2 6
3 5
4 3
1 -1 -1
2 1 1
3 -1 1
4 1 -1
NO

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制 子任务依赖
11 1010 2≤n≤102 \leq n \leq 10
22 77 2≤n≤2⋅105,k=12 \leq n \leq 2 \cdot 10^5, k=1
33 1515 2≤n≤2⋅1052 \leq n \leq 2 \cdot 10^5,对于所有 tt,所有 ai,ta_{i, t} 都不同 22
44 1515 2≤n≤2⋅105,1≤k≤22 \leq n \leq 2 \cdot 10^5, 1 \leq k \leq 2 22
55 2626 2≤n≤400,1≤k≤72 \leq n \leq 400, 1 \leq k \leq 7 11
66 2727 2≤n≤2⋅105,1≤k≤72 \leq n \leq 2 \cdot 10^5, 1 \leq k \leq 7 1,2,3,4,51,2,3,4,5