30 lines
761 B
C++
30 lines
761 B
C++
|
||
#include <bits/stdc++.h>
|
||
using namespace std;
|
||
const int N = 200010;
|
||
int a[N];
|
||
|
||
int main() {
|
||
int n;
|
||
while (~scanf("%d", &n) && n) {
|
||
int x = 0;
|
||
for (int i = 0; i < n; i++) {
|
||
scanf("%d", &a[i]);
|
||
x = x ^ a[i];
|
||
}
|
||
if (!x)
|
||
puts("No");
|
||
else {
|
||
puts("Yes");
|
||
for (int i = 0; i < n; i++) {
|
||
int res = a[i] ^ x;
|
||
//找到了证明中提到的: a_i ,此堆的数量最高位第k位,数值为1
|
||
//拿走:a[i]- (a[i]^x)
|
||
//剩下:a[i]^x = res个
|
||
if (res < a[i])
|
||
printf("%d %d\n", a[i], res);
|
||
}
|
||
}
|
||
}
|
||
return 0;
|
||
} |