돌
시간 제한2초메모리 제한1024 MB
이진수 값이 k 이하인 서로 다른 구간을 뒤집어 돌의 배열이 이진수 n이 되는 방법의 수를 10^9+7로 나눈 나머지로 구합니다.
문제
바샤에게는 평평한 돌이 여러 개 있습니다. 각 돌은 한쪽 면이 흰색이고 다른 쪽 면이 검은색입니다. 그는 돌들을 검은색 면이 아래로 가게 일렬로 놓았습니다. 바샤는 눈치가 빨라서, 눈앞의 그림이 사실 이진수라는 것을 알아챘습니다. 흰색 면이 위로 놓인 돌은 0, 검은색 면이 위로 놓인 돌은 1로 봅니다. 첫 번째 돌의 가중치는 1, 두 번째 돌은 2, 세 번째 돌은 4이며, 이런 식으로 이어집니다.
이제 그는 수 을 정하고 이 수를 만들고 싶어 합니다. 그가 할 수 있는 일은 길이가 0이 아닌 구간 하나를 골라 뒤집는 것뿐입니다. 구간을 뒤집으면 그 안의 돌들이 모두 뒤집힙니다. 검은색은 흰색으로, 흰색은 검은색으로 바뀝니다. 다만 뒤집을 수 있는 구간에도 제한이 있습니다. 구간도 이진수로 볼 수 있으며, 그 구간에 해당하는 수가 를 넘지 않는 구간만 뒤집을 수 있습니다. 또한 바샤는 같은 행동을 반복하고 싶지 않아서, 뒤집는 구간들은 모두 서로 달라야 합니다. 그는 그림이 수 에 해당하는 상태가 되도록 만드는 방법이 몇 가지인지 알고 싶어 합니다. 이 수는 매우 클 수 있으므로 로 나눈 나머지를 출력하세요.
입력
첫 번째 줄에 공백으로 구분된 두 정수 ()과 ()가 주어집니다.
출력
조건을 만족하는 방법의 수를 로 나눈 나머지를 출력하세요.