만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

XOR보나치 수열

시간 제한1초메모리 제한64 MB

요약
앞 K개 항으로 정의된 XOR 점화식에서 구간 [l, r]의 XOR을 묻는 질의를 대량으로 처리합니다.
난이도

보통10점 중 6점

유형
수학, 누적 합, 비트 연산
정답자
아직 제출이 없습니다

문제

마린은 파리를 잡겠다고 라켓을 너무 세게 휘두르다 팔꿈치를 다쳤다. 할머니는 약초를 바르라고 했고 의사는 진통제를 처방했지만, 마린은 둘 다 무시하고 정수 수열에서 답을 찾기로 했다.

마린은 새 수열을 하나 만들고 XOR보나치 수열이라고 이름 붙였다. 이 수열의 nn번째 항을 xnx_n이라 하고, 다음과 같이 정의한다.

  • x1=a1x_1 = a_1
  • x2=a2x_2 = a_2
  • …\dots
  • xk=akx_k = a_k
  • n>kn > k이면 xn=xn−1⊕xn−2⊕⋯⊕xn−kx_n = x_{n-1} \oplus x_{n-2} \oplus \dots \oplus x_{n-k}

마린은 질문 QQ개의 답을 받으면 아픔이 사라진다고 한다. 각 질문은 두 수 ll과 rr로 주어지고, 답은 다음 값이다.

xl⊕xl+1⊕⋯⊕xr−1⊕xrx_l \oplus x_{l+1} \oplus \dots \oplus x_{r-1} \oplus x_r

여기서 ⊕\oplus는 비트 단위 XOR 연산이다.

입력

첫째 줄에 정수 KK가 주어진다 (1≤K≤100 0001 \le K \le 100\,000).

둘째 줄에 XOR보나치 수열의 처음 KK개 항이 주어진다. 각 값은 101810^{18}보다 작은 음이 아닌 정수이다.

셋째 줄에 정수 QQ가 주어진다 (1≤Q≤1061 \le Q \le 10^6).

이어지는 QQ개의 줄 중 ii번째 줄에는 ii번째 질문을 나타내는 두 정수 lil_i와 rir_i가 주어진다 (1≤li≤ri≤10181 \le l_i \le r_i \le 10^{18}).

출력

QQ개의 줄을 출력한다. ii번째 줄에는 입력에서 ii번째로 주어진 질문의 답을 출력한다.

예제2

  1. 예제 1

    입력
    4
    1 3 5 7
    3
    2 2
    2 5
    1 5
    
    예상 출력
    3
    1
    0
    
  2. 예제 2

    입력
    5
    3 3 4 3 2
    4
    1 2
    1 3
    5 6
    7 9
    
    예상 출력
    0
    4
    7
    4