XOR

xor가 x 이상인 가장 긴 연속 구간을 찾아 시작 위치와 길이를 출력하며 동점이면 시작 위치가 가장 작은 구간을 선택합니다.

보통7트라이비트 연산누적 합아직 제출이 없습니다시간 제한5초메모리 제한256 MB

문제

길이가 NN인 수열 a1,a2,,aNa_1, a_2, \ldots, a_N과 정수 xx가 주어진다. 연속한 원소의 xor가 xx 이상인 구간 중에서 가장 긴 것을 찾아라. 즉 다음 조건을 만족하면서 kk가 최대인 iikk를 구한다.

aiai+1ai+k1x,1ii+k1Na_i \oplus a_{i+1} \oplus \cdots \oplus a_{i+k-1} \ge x, \qquad 1 \le i \le i+k-1 \le N

입력으로 주어지는 모든 데이터에는 조건을 만족하는 구간이 적어도 하나 있다.

xor(\oplus)는 두 수를 이진법으로 적었을 때 같은 자리의 비트마다 다음 규칙을 적용한 결과다.

  • 00=00 \oplus 0 = 0
  • 01=10 \oplus 1 = 1
  • 10=11 \oplus 0 = 1
  • 11=01 \oplus 1 = 0

결과는 피연산자의 순서와 무관해서 ab=baa \oplus b = b \oplus a이고, a(ab)=ba \oplus (a \oplus b) = b이다. 파스칼에서는 xor, C와 C++, 자바에서는 ^ 연산자로 쓴다.

입력

첫째 줄에 NNxx가 주어진다. (1N2500001 \le N \le 250\,000, 0x1090 \le x \le 10^9)

둘째 줄에 수열의 원소 NN개가 공백으로 구분되어 주어진다. 각 원소는 10910^9 이하의 음이 아닌 정수다.

출력

첫째 줄에 iikk를 공백으로 구분해 출력한다. kk가 최대인 답이 여러 개면 ii가 가장 작은 것을 출력한다.