아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

xor 게임

시간 제한0.5초메모리 제한128 MB

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

어려움10점 중 8점

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

문제

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

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

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

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

입력

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

출력

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

힌트

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

예제2

  1. 예제 1

    입력
    2 3 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    0 0 2
    
    예상 출력
    147483634