Nộp bài
Điểm:
1000 (thành phần)
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Tác giả:
Dạng bài
Bạn được cho một dãy số a gồm n phần tử. Dãy số b được tạo bằng cách như sau:
- b_1=a_1\oplus a_2
- b_2=a_2\oplus a_3
- b_3=a_3\oplus a_4
- \dots
- b_{n-1}=a_{n-1}\oplus a_n
- b_n=a_n\oplus a_1
Trong đó, \oplus là thao tác bit XOR. Bạn có thể đọc tại đây
Bạn được cho dãy số b, nhiệm vụ của bạn là tìm một dãy số a thỏa mãn điều kiện sao cho thứ tự từ điển của dãy là nhỏ nhất.
Một dãy số a được coi là có thứ tự từ điển nhỏ hơn dãy số b khi tồn tại vị trí i mà:
- Với mọi vị trí j<i thì a_j=b_j
- a_i<b_i
Input, Output và Subtasks
Input
- Dòng thứ nhất gồm 1 số t là số testcase (1\le t\le 10^4)
- Sau đó là t block được định dạng như sau:
- Dòng đầu tiên gồm 1 số n (2\le n\le 10^5)
- Dòng tiếp theo gồm n số b_1,b_2,\dots,b_n (0\le b_i<2^{30})
- Dữ liệu đảm bảo tổng n trong tất cả testcase không quá 2\times 10^5
Output
- Xuất ra t dòng được định dạng như sau:
- Nếu không có dãy thỏa mãn, xuất
-1
- Ngược lại, xuất ra dãy a thỏa mãn có thứ tự từ điển nhỏ nhất, các giá trị được cách nhau bởi 1 dấu cách
- Nếu không có dãy thỏa mãn, xuất
Sample
Input
3
3
1 2 3
3
1 0 0
10
3 6 4 5 2 4 5 14 1 8
Output
0 1 3
-1
0 3 5 1 4 6 2 7 9 8
Bình luận