만드는 중입니다

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

암호학

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

요약
f, g, h 배열로 정의된 xor 암호 함수를 거꾸로 계산해 각 질의 (a, b)를 만드는 (x, y)를 구합니다.
난이도

보통10점 중 4점

유형
비트 연산, 배열
정답자
아직 제출이 없습니다

문제

길이가 2m2^m인 세 배열 ff, gg, hh가 주어진다. Bobo는 다음과 같이 암호 함수 enc(x,y)=(a,b)\mathrm{enc}(x, y) = (a, b)를 정의한다.

a=y⊕g[x⊕f[y]]a = y \oplus g[x \oplus f[y]]

b=x⊕f[y]⊕h[y⊕g[x⊕f[y]]]b = x \oplus f[y] \oplus h[y \oplus g[x \oplus f[y]]]

Bobo에게는 qq개의 질문 (a1,b1),…,(aq,bq)(a_1, b_1), \dots, (a_q, b_q)가 있다. 각 (ai,bi)(a_i, b_i)에 대해 enc(x,y)=(ai,bi)\mathrm{enc}(x, y) = (a_i, b_i)를 만족하는 정수 (x,y)(x, y)를 0≤x,y<2m0 \le x, y < 2^m 범위에서 구한다. 각 질문마다 이 조건을 만족하는 쌍 (x,y)(x, y)가 정확히 하나 존재함이 보장된다.

⊕\oplus는 비트 단위 배타적 논리합(xor)을 뜻한다.

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 파일 끝(EOF)에서 끝난다. 각 테스트 케이스는 다음 형식으로 주어진다.

첫 줄에 정수 mm과 qq가 주어진다. 둘째 줄에 2m2^m개의 정수 f[0],…,f[2m−1]f[0], \dots, f[2^m - 1]이 주어진다. 셋째 줄에 2m2^m개의 정수 g[0],…,g[2m−1]g[0], \dots, g[2^m - 1]이 주어진다. 넷째 줄에 2m2^m개의 정수 h[0],…,h[2m−1]h[0], \dots, h[2^m - 1]이 주어진다. 이어서 qq개의 줄에 각각 정수 aia_i와 bib_i가 주어진다.

출력

각 질문에 대해 구한 xx와 yy를 공백으로 구분하여 한 줄에 출력한다.

제한

  • 1≤m≤161 \le m \le 16\n- 1≤q≤1051 \le q \le 10^5\n- 각 0≤i<2m0 \le i < 2^m에 대해 0≤f[i],g[i],h[i]<2m0 \le f[i], g[i], h[i] < 2^m\n- 각 1≤i≤q1 \le i \le q에 대해 0≤ai,bi<2m0 \le a_i, b_i < 2^m\n- 한 입력에서 2m2^m의 합은 10510^5를 넘지 않는다. qq의 합도 10510^5를 넘지 않는다.

예제1

  1. 예제 1

    입력
    2 2
    0 1 2 3
    1 2 3 0
    2 3 0 1
    0 1
    2 3
    1 1
    0 0
    0 0
    0 0
    0 0
    
    예상 출력
    3 0
    1 2
    0 0