Về 0
Xem dạng PDFCho mảng ~a~ gồm các số nguyên không âm.
Bạn có thể tạo ra một mảng ~b~ mới tinh bằng cách chọn một số nguyên ~x~ sau đó biến ~a_i~ thành ~b_i~ với ~b_i = a_i \oplus x~.
Trong đó ~\oplus~ là phép toán XOR của hai số nguyên.
XOR là phép toán hoặc loại trừ giữa hai số nhị phân. Kết quả của phép XOR giữa hai bit là:
1 nếu hai bit khác nhau.
0 nếu hai bit giống nhau.
Ví dụ:
* 0 ⊕ 0 = 0
* 1 ⊕ 1 = 0
* 1 ⊕ 0 = 1
* 0 ⊕ 1 = 1
Khi áp dụng phép XOR vào các số nguyên, ta thực hiện phép XOR bit-by-bit trên từng cặp bit của hai số.
Ví dụ cụ thể với a = 5, b = 3, kết quả a ⊕ b = 6
101 (5 trong hệ nhị phân)
⊕
011 (3 trong hệ nhị phân)
---
110 (6 trong hệ nhị phân)
Trong hầu hết các ngôn ngữ lập trình thì XOR được thể hiện bằng ký tự '^'.
Giả sử C++:
#include <bits/stdc++.h>
using namespace std;
main(){
int a = 3,b=5;
int c = a^b;
cout << c; // Kết quả c = 6
}
Bạn có thể chọn một số ~x~ sao cho giá trị của ~b_1 \oplus b_2 \oplus ... \oplus b_n~ bằng ~0~ không?
Lưu ý: Đề bài đảm bảo rằng nếu tồn tại ~x~ thoả mãn thì tồn tại ~x~ thoả mãn với ~0 \le x \le 2^8~.
Đầu vào
Dòng đầu tiên chứa số nguyên ~T~ là số lượng testcase. ~(1 \le T \le 1000)~
Dòng đầu tiên của mỗi testcase chứa số nguyên ~n~ là số lượng phần tử của mảng ~a~. ~(1 \le n \le 10^6)~
Dòng thứ hai của mỗi testcase gồm ~n~ số nguyên ~a_i~. ~(0 \le a_i < 2^8)~
Đầu vào đảm bảo tổng số lượng ~n~ ở tất cả các testcase không vượt quá ~10^6~.
Đầu ra
In ra ~T~ dòng, mỗi dòng chứa duy nhất số nguyên ~x~ nếu tồn tại ~x~ thoả mãn ~(0 \le x < 2^8)~, hoặc ~-1~ nếu không tồn tại số nào thoả mãn.
Giới hạn
~50\%~ số test: ~1 \le n \le 10^3~.
~50\%~ số test: Không có ràng buộc gì thêm.
Ví dụ
Đầu vào
5
3
1 2 5
3
1 2 3
4
0 1 2 3
4
1 2 2 3
1
1
Đầu ra
6
0
0
-1
1
Giải thích
Ở testcase đầu tiên, với ~x = 6~ ta tạo được mảng ~b~ ~[7, 4, 3]~ và ~7 \oplus 4 \oplus 3 = 0~.