비트문자열

NYPC 2022 · Round 2-B

어떤 양의 정수 KK에 대해 길이가 2K2^K인 비트문자열 XX가 있다. XX의 비트들은 왼쪽부터 순서대로 11번부터 2K2^K번까지 번호가 붙어 있다. 처음에 XX의 모든 비트는 00이다.

다음과 같은 함수 f(x)f(x)가 있다. 이때, xx는 길이가 2k2^k 꼴인 비트문자열이다.

  1. xx의 길이가 11인 경우, 아무 작업 없이 종료한다.
  2. xx를 절반으로 나눈다. 왼쪽 절반을 ll, 오른쪽 절반을 rr이라고 하자.
  3. 왼쪽 절반 ll의 비트를 뒤집는다.
  4. f(l)f(l)을 재귀호출 한다.
  5. f(r)f(r)을 재귀호출 한다.

여기서, 비트를 뒤집는다는 것은 0011로 만들고, 1100으로 만든다는 것을 의미한다.

모든 비트가 00인 길이가 2K2^K인 비트문자열 XX에서 f(X)f(X)를 호출한 이후 비트문자열 XXSKS_K라고 하자.

K=1K = 1인 경우, 초기 비트문자열은 0000이다. 위 작업의 결과로 최종 비트문자열은 1010이 된다. (왼쪽 절반인 0011로 바뀌었다.)

K=2K = 2인 경우, 초기 비트문자열은 00000000이다. 위 작업에서 첫 번째 호출이 비트문자열을 11001100으로 바꾼다. 첫 번째 호출에서 4번 과정의 재귀호출을 하면 비트문자열이 01000100으로 바뀌고, 5번 과정의 재귀호출을 하면 비트문자열은 01100110으로 바뀌므로, 최종 비트문자열은 01100110이 된다.

K=3K = 3인 경우, 이와 마찬가지로 최종 비트문자열은 1001011010010110이 된다.

정리하면 다음과 같다.

KKSKS_K
111010
2201100110
331001011010010110
4401101001100101100110100110010110

양의 정수 KK, LL, RR를 입력으로 받아, SKS_KLL번 비트부터 RR번 비트까지 11의 개수를 구하는 프로그램을 작성하시오.

입력 형식

첫 줄에 테스트 케이스의 수를 나타내는 정수 TT가 주어진다. (1T2000001 \le T \le 200\,000)

각 테스트 케이스의 첫 줄에 양의 정수 KK, LL, RR이 공백으로 구분되어 주어진다. (1K,L,R1000000000000000000;1 \le K, L, R \le 1\,000\,000\,000\,000\,000\,000; LR2KL \le R \le 2^{K})

출력 형식

각 테스트 케이스에 대해, SKS_KLL번 비트부터 RR번 비트까지 11의 개수를 각 줄에 출력한다.

예제

입력

3 2 2 4 3 1 6 4 3 6

출력

2 3 2

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 11

T49;T \le 49; K3K \le 3

종류 2: 12

T10;T \le 10; K20K \le 20

종류 3: 24

K20K \le 20

종류 4: 16

K60;K \le 60; L=RL = R

종류 5: 18

K60K \le 60

종류 6: 19

추가적인 제한 조건이 없음.

해설