xor 게임
시간 제한0.5초메모리 제한128 MB
0 이상 2^31 미만의 xor 마스크 n개를 골라 a를 b로 만드는 과정의 수를 10^9+7로 나눈 나머지를 구한다.
문제
chogahui05가 xor 게임을 한다. 게임은 번의 턴 동안 진행하고, 부터 까지의 정수가 하나씩 적힌 카드가 종류마다 무한히 많이 준비되어 있다. 규칙은 다음과 같다.
- chogahui05는 정수 가 적힌 카드를 들고 시작한다.
- 매 턴마다 아래 작업을 해야 한다.
- 을 만족하는 정수 를 하나 고른다.
- 지금 들고 있는 카드에 적힌 수를 이라고 할 때, 그 카드를 가 적힌 카드로 바꾼다. 는 비트 단위 배타적 논리합이다.
게임을 마쳤을 때 chogahui05가 들고 있는 카드에 적힌 수는 였다.
게임의 과정으로 가능한 경우의 수를 ()로 나눈 나머지를 구하라. 어떤 턴에서 고른 가 하나라도 다르면 서로 다른 과정이다.
입력
첫째 줄에 정수 , ()와 ()이 공백으로 구분되어 주어진다.
출력
첫째 줄에 게임의 과정으로 가능한 경우의 수를 로 나눈 나머지를 출력한다.
힌트
, , 인 경우를 보자. 턴이 한 번뿐이므로 로 을 골라 이 적힌 카드로 바꾸는 경우 말고는 없다.