XOR 합

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

비어 있는 수 리스트가 하나 있다. 이 리스트에 QQ개의 명령을 주어진 순서대로 처리한다.

  • insert N: 리스트에 NN을 넣는다. 같은 수가 여러 번 들어올 수 있다.
  • print: 리스트에 있는 수 가운데 큰 것부터 KK개를 골라 XOR 합을 출력한다. 리스트에 든 수가 KK개보다 적으면 리스트에 있는 모든 수의 XOR 합을 출력하고, 리스트가 비어 있으면 00을 출력한다.

XOR 합은 고른 수를 전부 XOR 한 값이다. 두 정수의 XOR는 대부분의 언어에서 ^ 연산자로 계산한다. 하스켈에서는 xor를 쓴다.

값이 같은 수가 여러 개 있으면 각각을 별개의 원소로 센다. 리스트가 [5,5,3][5, 5, 3]이고 K=2K = 2이면 고르는 수는 5555이므로 XOR 합은 00이다.

XOR에는 쓸모 있는 성질이 있다. NM=XN \oplus M = X이면 N=XMN = X \oplus M이고 M=XNM = X \oplus N이다.

입력

첫 줄에 테스트 케이스의 수 TT (1T301 \le T \le 30)가 주어진다.

각 테스트 케이스의 첫 줄에는 QQKK (1Q,K1000001 \le Q, K \le 100\,000)가 주어진다. 이어서 QQ개의 줄에 명령이 한 줄에 하나씩 주어지며, 각 명령은 다음 두 형태 중 하나이다.

insert N
print

NN2312^{31}보다 작은 음이 아닌 정수이다.

출력

print 명령마다 답을 한 줄에 하나씩 출력한다. 리스트는 테스트 케이스마다 비어 있는 상태에서 다시 시작한다.