수열 변환

항목이 [1, 2^k)에 속하는 길이 n 정수 수열 중 접두사 비트 OR 값이 순증가하는 수열의 개수를 구한다. n은 1e18, k는 30000까지이다.

어려움8조합론비트 연산수학동적 계획법아직 제출이 없습니다시간 제한10초메모리 제한512 MB

문제

수열 A=a1,a2,,anA = a_1, a_2, \dots, a_n에 연산 PP를 적용하면 수열 B=b1,b2,,bnB = b_1, b_2, \dots, b_n이 된다. 이때 bi=a1a2aib_i = a_1 \mathbin{|} a_2 \mathbin{|} \cdots \mathbin{|} a_i이고, |는 비트 OR 연산이다.

11 이상 2k2^k 미만의 정수로 이루어진 길이 nn의 수열 전체에 연산 PP를 적용한다. 결과가 오름차순, 즉 b1<b2<<bnb_1 < b_2 < \cdots < b_n이 되는 수열의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 nnkk가 공백으로 구분되어 주어진다. (1n10181 \le n \le 10^{18}, 1k300001 \le k \le 30000)

출력

첫째 줄에 조건을 만족하는 수열의 개수를 109+710^9+7로 나눈 나머지를 출력한다.