Gửi bài giải

Điểm: 1,50
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 98M
Input: stdin
Output: stdout

Tác giả:
Dạng bài

Cho 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~.


Đang tải...