#include 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; }