Камни

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

요약
값이 k 이하인 서로 다른 구간을 뒤집는 과정으로 모두 흰색인 줄을 n의 이진 표현으로 만드는 방법의 수를 1e9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 조합론, 수학
정답자
아직 제출이 없습니다

문제

У Васи есть несколько плоских камней. Каждый камень белый с одной стороны и чёрный с другой. Он разложил их в ряд чёрной стороной вниз. Вася догадливый и заметил, что картинка перед ним --- на самом деле двоичное число. Картина переводится в двоичное число следующим образом. Камень, лежащий белой стороной вверх считается нулём, чёрной --- единицей. Первый камень берётся с коэффициентом 1, второй --- 2, третий --- 4, и т.д.

Теперь он задумал число nn и хочет получить его. Однако, единственное, что он может делать --- это перевернуть какой-то отрезок камней ненулевой длины. При перевороте отрезка все камни на нём переворачиваются с чёрной стороны на белую, с белой --- на чёрную. Однако, даже отрезки он может переворачивать не все. Он заметил, что переворачиваемый отрезок на самом деле тоже двоичное число. Он может переворачивать только те отрезки камней, соответствующее которым число не превышает kk.

Также, Вася не хочет повторяться, и все переворачиваемые им отрезки должны быть различны. Его заинтересовало количество способов добиться своей цели, а именно, получить картину, соответствующую числу nn. Так как такое количество может быть большим, выведите его остаток от деления на 109+710^9 + 7.

입력

В первой строке входного файла через пробел заданы числа nn (1≤n≤10181 \le n \le 10^{18}) и kk (1≤k≤10181 \le k \le 10^{18}).

출력

Выведите требуемое количество способов по модулю 109+710^9 + 7.

예제1

  1. 예제 1

    입력
    3 4
    
    예상 출력
    2