생일 선물 수열
시간 제한2초메모리 제한512 MB
각 질의 (x, K)마다 {1, x, x^2, ...}의 공집합이 아닌 모든 부분집합 합을 중복 없이 정렬했을 때 K번째 값을 구하고, 모든 질의의 값을 더해 1e9+7로 나눈 나머지를 출력한다.
문제
동혁이에게는 친구가 명 있다. 친구들은 동혁이의 생일에 수열을 선물하려 했지만, 수열을 이루는 수가 너무 많아서 수열 전체 대신 수열을 만들 수 있는 수 하나와 만드는 방법만 알려 줬다. 오늘 친구들은 각자 선물한 수열의 번째 수를 물어보려 한다. 동혁이는 수열을 하나도 외우지 못했으니 대신 답을 구해 주자.
번째 친구가 선물한 수 로 만드는 수열 의 규칙은 다음과 같다. 의 거듭제곱을 원소로 하는 집합을 라 하자. 의 공집합이 아닌 유한 부분집합을 모두 나열해 라 하고, 부분집합 의 원소를 모두 더한 값을 라 하자. 수열 는 이 를 오름차순으로 정렬한 것이며, 같은 값이 두 번 나오지 않는 증가수열이다.
예를 들어 이면 이고, 부분집합의 합을 작은 것부터 적으면 은 이 된다.
입력
첫째 줄에 친구의 수 ()이 주어진다.
이어지는 개의 줄에는 친구가 선물한 수 ()와 친구가 묻고 싶은 순번 ()가 공백으로 구분되어 한 줄에 하나씩 주어진다.
출력
친구마다 자신이 선물한 수 로 만든 수열 의 번째 수를 구한 뒤, 그 값을 모두 더한 결과를 로 나눈 나머지를 첫째 줄에 출력한다.