Cho hai số nguyên A và B. Hãy tính XOR của tất cả các số nguyên trong đoạn đóng từ A đến B:
Axor(A+1)xor⋯xorB.
Input
Một dòng chứa hai số nguyên A và B.
Output
In giá trị XOR của toàn bộ các số nguyên từ A đến B, kể cả hai đầu mút.
Constraints
0≤A≤B≤1012.
Scoring
Subtask 1 (50 điểm): 10 test có B nhỏ, cho phép XOR trực tiếp từng số.
Subtask 2 (50 điểm): 10 test đầy đủ; test 19 là một đoạn dài gần cận trên, còn test 20 là đoạn chỉ gồm số 1012.
Example
Test 1
Input
5 9
Output
5
Giải thích: Khi thực hiện XOR lần lượt các số 5,6,7,8,9, giá trị cuối cùng thu được là 5.
Lời giải tóm tắt
Ý tưởng: Đặt F(n)=0xor1xor⋯xorn. Dãy F(n) lặp theo nmod4: lần lượt là n,1,n+1,0. Khi đó XOR trên đoạn [A,B] bằng F(B)xorF(A−1).
Chứng minh đúng đắn: Ta có
Chứng minh đúng đắn:
F(B)=F(A−1)xorAxor(A+1)xor⋯xorB.
Chứng minh đúng đắn: XOR hai vế với F(A−1) làm phần tiền tố xuất hiện hai lần và triệt tiêu, nên biểu thức cần tìm đúng bằng F(B)xorF(A−1). Với A=0, tiền tố bên trái rỗng và được xem là 0.
Chứng minh đúng đắn: Công thức của F(n) thu được bằng cách nhóm bốn số liên tiếp: XOR của mỗi khối 4q,4q+1,4q+2,4q+3 bằng 0, rồi xét số phần tử còn dư. Vì thế hàm theo bốn trường hợp nmod4 luôn tính đúng tiền tố, và thuật toán tính đúng XOR của đoạn.