만드는 중입니다

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

완벽한 삼중항

시간 제한2초메모리 제한1024 MB

요약
n이 최대 1e16일 때, 사용되지 않은 XOR이 0인 사전순 최소 세 수를 차례로 붙여 만든 수열의 n번째 원소를 구합니다.
난이도

어려움10점 중 8점

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

문제

양의 정수로 이루어진 무한 수열 ss를 다음 단계를 반복하여 만든다.

  1. 다음 조건을 만족하는 양의 정수 세 수 (a,b,c)(a, b, c) 중 사전순으로 가장 작은 것을 찾는다.

    • a⊕b⊕c=0a \oplus b \oplus c = 0이다. 여기서 ⊕\oplus는 비트 단위 XOR 연산을 뜻한다.
    • aa, bb, cc는 모두 ss에 없다.

    세 수 (a1,b1,c1)(a_1, b_1, c_1)은 수열 [a1,b1,c1][a_1, b_1, c_1]이 [a2,b2,c2][a_2, b_2, c_2]보다 사전순으로 작을 때 (a2,b2,c2)(a_2, b_2, c_2)보다 작다.

  2. aa, bb, cc를 이 순서대로 ss의 뒤에 붙인다.

  3. 1번 단계로 돌아간다.

정수 nn이 주어진다. ss의 nn번째 원소를 구하라.

이 문제는 tt개의 독립적인 테스트 케이스에 답해야 한다.

수열 aa가 수열 bb보다 사전순으로 작다는 것은, 두 수열이 처음으로 달라지는 위치에서 aa의 원소가 bb의 대응하는 원소보다 작다는 뜻이다.

입력

첫 번째 줄에 테스트 케이스의 개수 tt (1≤t≤1051 \le t \le 10^5)가 주어진다.

다음 tt개의 줄에는 각각 정수 nn (1≤n≤10161 \le n \le 10^{16})이 하나씩 주어진다. 구하려는 원소의 위치이다.

출력

각 테스트 케이스마다 답을 한 줄에 출력한다.

힌트

수열 ss의 처음 원소는 1,2,3,4,8,12,5,10,15,…1, 2, 3, 4, 8, 12, 5, 10, 15, \dots 이다.

예제1

  1. 예제 1

    입력
    9
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    예상 출력
    1
    2
    3
    4
    8
    12
    5
    10
    15