칠흑의 날개

전체 XOR 갱신이 반복되는 배열에서 K번째로 작은 원소까지의 합을 구한다.

어려움8트라이비트 연산분할 정복구현아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

"으아아아아악..."

스스로를 '칠흑의 날개'라고 부르는 에디는 악의 조직 다크 리유니온과 싸우고 있었다. 그러다 화들짝 놀라며 꿈에서 깼다.

'더 강해져야 해.' 에디는 속으로 되뇌었다.

에디는 강한 전사가 되려고 자주 수련한다. 수련하는 동안 에디는 마법석 NN개를 모았다. ii번 마법석에는 어둠의 힘이 AiA_i만큼 담겨 있다. 에디는 QQ번의 차례를 진행하고, 각 차례마다 다음 두 가지 중 하나를 고른다.

  • 1 X: 모든 마법석에 어둠의 힘 XX를 사용한다. 각 마법석의 어둠의 힘은 지금 값과 XX의 비트 단위 배타적 논리합으로 바뀐다. 즉 어둠의 힘이 AiA_i인 마법석은 AiXA_i \oplus X가 된다.
  • 2 K: 모든 마법석을 어둠의 힘이 작은 순서대로 정렬한 다음, 앞에서 KK개의 어둠의 힘을 더한다. 이 차례는 마법석의 어둠의 힘을 바꾸지 않는다.

에디의 계산이 맞는지 확인해 주자.

xyx \oplus y는 두 정수 xxyy에 비트 단위 배타적 논리합을 적용한 결과이다. 이 연산은 현대 프로그래밍 언어라면 모두 제공한다. C++와 자바에서는 ^로 쓰고, 파스칼에서는 xor로 쓴다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 마법석의 개수 NN과 명령의 개수 QQ가 주어진다.

둘째 줄에는 정수 NNA1,A2,,ANA_1, A_2, \dots, A_N이 주어진다. AiA_iii번 마법석에 담긴 어둠의 힘이다.

이어지는 QQ개의 줄에는 명령이 한 줄에 하나씩 1 X 또는 2 K 형태로 주어진다.

다음을 가정해도 된다.

  • T1000T \le 1000
  • 1N,Q1000001 \le N, Q \le 100000
  • 0Ai,X<2310 \le A_i, X < 2^{31}
  • 1KN1 \le K \le N
  • N+Q>200N + Q > 200인 테스트 케이스는 최대 5개다.

출력

2 K 명령마다 정렬한 뒤 앞에서 KK개의 어둠의 힘을 더한 값을 한 줄에 하나씩 출력한다.