xor 게임

0 이상 2^31 미만의 xor 마스크 n개를 골라 a를 b로 만드는 과정의 수를 10^9+7로 나눈 나머지를 구한다.

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

문제

chogahui05가 xor 게임을 한다. 게임은 nn번의 턴 동안 진행하고, 00부터 23112^{31} - 1까지의 정수가 하나씩 적힌 카드가 종류마다 무한히 많이 준비되어 있다. 규칙은 다음과 같다.

  • chogahui05는 정수 aa가 적힌 카드를 들고 시작한다.
  • 매 턴마다 아래 작업을 해야 한다.
    • 0u<2310 \le u < 2^{31}을 만족하는 정수 uu를 하나 고른다.
    • 지금 들고 있는 카드에 적힌 수를 numnum이라고 할 때, 그 카드를 numunum \oplus u가 적힌 카드로 바꾼다. \oplus는 비트 단위 배타적 논리합이다.

게임을 마쳤을 때 chogahui05가 들고 있는 카드에 적힌 수는 bb였다.

게임의 과정으로 가능한 경우의 수를 10000000071000000007(109+710^9 + 7)로 나눈 나머지를 구하라. 어떤 턴에서 고른 uu가 하나라도 다르면 서로 다른 과정이다.

입력

첫째 줄에 정수 aa, bb (0a,b<2310 \le a, b < 2^{31})와 nn (0<n1090 < n \le 10^9)이 공백으로 구분되어 주어진다.

출력

첫째 줄에 게임의 과정으로 가능한 경우의 수를 10000000071000000007로 나눈 나머지를 출력한다.

힌트

a=2a = 2, b=3b = 3, n=1n = 1인 경우를 보자. 턴이 한 번뿐이므로 uu11을 골라 21=32 \oplus 1 = 3이 적힌 카드로 바꾸는 경우 말고는 없다.