생일 선물 수열

각 질의 (x, K)마다 {1, x, x^2, ...}의 공집합이 아닌 모든 부분집합 합을 중복 없이 정렬했을 때 K번째 값을 구하고, 모든 질의의 값을 더해 1e9+7로 나눈 나머지를 출력한다.

보통6수학조합론구현비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

동혁이에게는 친구가 NN명 있다. 친구들은 동혁이의 생일에 수열을 선물하려 했지만, 수열을 이루는 수가 너무 많아서 수열 전체 대신 수열을 만들 수 있는 수 xx 하나와 만드는 방법만 알려 줬다. 오늘 친구들은 각자 선물한 수열의 KK번째 수를 물어보려 한다. 동혁이는 수열을 하나도 외우지 못했으니 대신 답을 구해 주자.

ii번째 친구가 선물한 수 xix_i로 만드는 수열 MiM_i의 규칙은 다음과 같다. xix_i의 거듭제곱을 원소로 하는 집합을 A={xi0,xi1,xi2,}A = \{x_i^0, x_i^1, x_i^2, \dots\}라 하자. AA의 공집합이 아닌 유한 부분집합을 모두 나열해 A0,A1,A2,A_0, A_1, A_2, \dots라 하고, 부분집합 AjA_j의 원소를 모두 더한 값을 aja_j라 하자. 수열 MiM_i는 이 aja_j를 오름차순으로 정렬한 것이며, 같은 값이 두 번 나오지 않는 증가수열이다.

예를 들어 x=3x = 3이면 A={1,3,9,27,}A = \{1, 3, 9, 27, \dots\}이고, 부분집합의 합을 작은 것부터 적으면 MM1,3,4,9,10,12,13,1, 3, 4, 9, 10, 12, 13, \dots이 된다.

입력

첫째 줄에 친구의 수 NN (1N100,0001 \le N \le 100{,}000)이 주어진다.

이어지는 NN개의 줄에는 친구가 선물한 수 xx (2x1,0002 \le x \le 1{,}000)와 친구가 묻고 싶은 순번 KK (1K1,000,000,0001 \le K \le 1{,}000{,}000{,}000)가 공백으로 구분되어 한 줄에 하나씩 주어진다.

출력

친구마다 자신이 선물한 수 xix_i로 만든 수열 MiM_iKiK_i번째 수를 구한 뒤, 그 값을 모두 더한 결과를 1,000,000,0071{,}000{,}000{,}007로 나눈 나머지를 첫째 줄에 출력한다.