엄청난 수열

첫 n-1개 항의 공집합이 아닌 모든 부분집합 합을 더해 수열을 정의하고, 여러 시작값에 대해 최대공약수, 최소공배수의 2의 지수, 구간 합, 특정 항을 구한다.

어려움9수학정수론조합론누적 합아직 제출이 없습니다시간 제한2초메모리 제한128 MB

문제

피보나치 수는 빠르게 커진다. 택희는 100만 번째 피보나치 수까지 종이에 적어 보고도 성에 차지 않아, 훨씬 빠르게 커지는 수열을 직접 정의했다.

첫 항은 a1=ka_1 = k이고, Nn={1,2,3,,n}N_n = \{1, 2, 3, \dots, n\}이라 할 때 다음 항은 아래 식으로 정해진다.

an+1=SNniSaia_{n+1} = \sum_{\emptyset \ne S \subseteq N_n} \sum_{i \in S} a_i

an+1a_{n+1}a1a_1부터 ana_n까지 중에서 하나 이상을 고르는 모든 방법마다 고른 수의 합을 구한 다음, 그 값을 전부 더한 것이다.

a1=1a_1 = 1인 수열의 앞부분 몇 항은 이렇다.

  • a2=(a1)=1a_2 = (a_1) = 1
  • a3=(a1)+(a2)+(a1+a2)=4a_3 = (a_1) + (a_2) + (a_1 + a_2) = 4
  • a4=(a1)+(a2)+(a3)+(a1+a2)+(a1+a3)+(a2+a3)+(a1+a2+a3)=24a_4 = (a_1) + (a_2) + (a_3) + (a_1 + a_2) + (a_1 + a_3) + (a_2 + a_3) + (a_1 + a_2 + a_3) = 24

택희는 이 수열을 놓고 질문 QQ개를 준비했다. 질문마다 첫 항 a1a_1을 따로 주므로 질문마다 다른 수열을 다룬다. 모든 질문에 답하는 프로그램을 작성하자.

입력

첫 줄에 질문의 개수 QQ가 주어진다. (1Q2000001 \le Q \le 200000)

이어지는 QQ개의 줄에 다음 네 가지 중 한 형태의 질문이 주어진다.

  • 1 a1 i j (1a11051 \le a_1 \le 10^5, 1i,j1061 \le i, j \le 10^6): 첫 항이 a1a_1인 수열에서 aia_iaja_j의 최대공약수는 얼마인가?
  • 2 a1 i j (1a11051 \le a_1 \le 10^5, 1i,j1061 \le i, j \le 10^6): 첫 항이 a1a_1인 수열에서 aia_iaja_j의 최소공배수를 LL이라 하자. 이 값은 너무 크므로, L2P\frac{L}{2^P}이 정수가 되게 하는 가장 큰 정수 PP를 묻는다.
  • 3 a1 i j (1a11051 \le a_1 \le 10^5, 1i,j1061 \le i, j \le 10^6): 첫 항이 a1a_1인 수열에서 k=ijak\sum_{k=i}^{j} a_k는 얼마인가? 이 형태의 질문은 항상 iji \le j를 만족하도록 주어진다.
  • 4 a1 k (1a11051 \le a_1 \le 10^5, 1k1061 \le k \le 10^6): 첫 항이 a1a_1인 수열에서 aka_k는 얼마인가?

출력

QQ개의 줄에 걸쳐 각 질문의 답을 1,000,000,007로 나눈 나머지를 입력에 주어진 순서대로 출력한다.