#P14855. [OOI2026 资格赛]History

[OOI2026 资格赛]History

题目描述

传统上,很少有学生参加历史课,于是老师决定改变制度,引入必须在课堂上当面完成的小组项目。现在所有编号为 11nnnn 名学生都会来上课。老师知道第 ii 名学生的知识水平为 aia_i

为了完成小组项目,学生们需要两两配对。为了让事情不那么简单,老师提出了如下要求:编号不同的两个人 iji \ne j 可以组成一对,当且仅当满足以下至少一个条件:

  • ai+aj=Sa_i+a_j=S
  • aiaj=Xa_i \oplus a_j=X,其中 \oplus 表示按位异或。

请帮助学生判断,是否可以把所有学生两两配对,使得每一对都满足老师的要求。

输入格式

第一行包含三个整数 n,S,Xn,S,X2n5000002 \le n \le 5000000S,X<2300 \le S,X < 2^{30},且 nn 为偶数),分别表示学生数量、配对所需的和以及配对所需的异或值。

第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n0ai<2300 \le a_i < 2^{30}),表示学生的知识水平。

输出格式

如果可以完成配对,第一行输出 Yes

接下来输出 n2\frac n2 行,每行包含两个整数 ci,dic_i,d_i1ci,din1 \le c_i,d_i \le ncidic_i \ne d_i),表示编号为 cic_idid_i 的学生组成一对。每个学生编号必须在所有输出的配对中恰好出现一次。

如果无法完成满足条件的配对,则只输出一行 No

样例

样例输入 1

6 7 0
1 2 9 9 5 6

样例输出 1

Yes
1 6
2 5
4 3

样例输入 2

4 6 2
1 5 2 3

样例输出 2

No

样例解释

第一个样例中的配对是合法的:

  • a1+a6=1+6=7a_1+a_6=1+6=7
  • a2+a5=2+5=7a_2+a_5=2+5=7
  • a4a3=99=0a_4 \oplus a_3=9 \oplus 9=0

计分方式

测试数据包含八个测试组。只有当某组所有测试点以及该组要求的若干前置组均通过时,才能获得该组分数。注意,某些测试组不要求通过样例测试。离线测试表示该组测试结果会在比赛结束后才可见。

组别 分数 nn 前置组 备注
0 - 样例
1 9 n20n \le 20 0 -
2 15 n100n \le 100 0-1
3 7 - S1,ai1S \le 1, a_i \ge 1
4 17 X=0X=0
5 10 n2000n \le 2000 0-2 -
6 21 - aa 中所有数互不相同
7 11 n100000n \le 100000 0-2, 5 -
8 10 - 0-7 离线测试