만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

해시 함수

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

요약
n과 H가 주어졌을 때, 해시 함수 h_n(A)의 값이 H가 되는 2n비트 정수 A를 찾습니다.
난이도

어려움10점 중 8점

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

문제

해시 함수 h_nh\_n은 2n2n비트로 이루어진 수 AA를 다음과 같이 암호화한다.

A=(a_2n−1a_2n−2⋯a_1a_0)_2A = (a\_{2n-1}a\_{2n-2} \cdots a\_1a\_0)\_2라고 하자. a_ia\_i는 AA의 ii번째 비트이다.

2n2n비트로 이루어진 수 B=(b_2n−1b_2n−2⋯b_1b_0)_2B = (b\_{2n-1}b\_{2n-2} \cdots b\_1b\_0)\_2는 다음과 같이 구한다.

b_i=a_i⊕a_2i+1, for 0≤i<n,b\_i = a\_i \oplus a\_{2i+1},\text{ for } 0 \le i < n, b_i=a_i⊕a_4n−2i−2, for n≤i<2n,b\_i = a\_i \oplus a\_{4n-2i-2},\text{ for } n \le i < 2n,

여기서 ⊕\oplus는 비트별 배타적 논리합(XOR)이다. 달리 말해 B=A⊕(a_0a_2⋯a_2n−4a_2n−2a_2n−1a_2n−3⋯a_3a_1)_2B = A \oplus (a\_0a\_2 \cdots a\_{2n-4}a\_{2n-2}a\_{2n-1}a\_{2n-3} \cdots a\_3a\_1)\_2이다.

다음으로 2n2n비트로 이루어진 수 C=B⊕RSH(B)C = B \oplus \text{RSH}(B)를 구한다. 여기서 RSH(B)\text{RSH}(B)는 BB를 1비트 순환 오른쪽 시프트한 값이다. 달리 말해 C=B⊕(b_0b_2n−1b_2n−2⋯b_2b_1)_2C = B \oplus (b\_0b\_{2n-1}b\_{2n-2} \cdots b\_2b\_1)\_2이다.

마지막으로 해시 값은 h_n(A)=239A+153C mod (22n−1−1)h\_n(A) = 239A + 153C \bmod (2^{2n-1}-1)이다.

예를 들어 n=4n=4이고 A=00001101_2=13A = 00001101\_2 = 13이라고 하자. 그러면 B=00001101_2⊕11000010_2=11001111_2=207B = 00001101\_2 \oplus 11000010\_2 = 11001111\_2 = 207이다. 이어서 C=11001111_2⊕11100111_2=00101000_2=40C = 11001111\_2 \oplus 11100111\_2 = 00101000\_2 = 40이다. 마지막으로 h_4(A)=239×13+153×40 mod (27−1)=9227 mod 127=83h\_4(A) = 239 \times 13 + 153 \times 40 \bmod (2^7-1) = 9227 \bmod 127 = 83이다.

이 해시 함수의 역함수를 구하는 것이 목표이다. 주어진 nn과 HH에 대해 h_n(A)=Hh\_n(A)=H를 만족하는 AA를 찾아라.

입력

두 정수 nn과 HH가 주어진다 (2≤n≤162 \le n \le 16, 0≤H<22n−1−10 \le H < 2^{2n-1}-1).

h_n(A)=Hh\_n(A)=H를 만족하는 AA (0≤A<22n0 \le A < 2^{2n})가 존재함이 보장된다.

출력

h_n(A)=Hh\_n(A)=H를 만족하는 정수 AA (0≤A<22n0 \le A < 2^{2n}) 하나를 출력한다.

조건을 만족하는 AA가 여러 개라면 그중 아무것이나 출력해도 된다.

예제1

  1. 예제 1

    입력
    4 83
    
    예상 출력
    13