만드는 중입니다

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

Bitovi

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

요약
크기 N인 두 집합 A와 B가 주어졌을 때, 각 이동의 결과 값이 현재 A에 없도록 한 비트씩 바꿔 A를 B로 만드는 과정을 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, BFS, 그리디
정답자
아직 제출이 없습니다

문제

닭이 먼저인가, 달걀이 먼저인가? 백만장자로 100년을 사는 것과 가난하게 7일을 사는 것 중 어느 쪽이 나은가? 체스 그랜드마스터는 어떻게 되는가? 블라인드는 어떻게 올리는가? 기말고사는 어떻게 통과하는가? 드래곤은 어떻게 훈련시키는가? 이런 질문들은 대회가 끝난 뒤에나 고민할 만한 흥미로운 질문이지만, 여기서는 조금 덜 흥미로운 컴퓨터 과학 문제를 하나 낸다.

크기가 NN인 두 수의 집합 AA와 BB가 주어진다. 한 번의 연산에서 집합 AA의 원소 하나를 골라, 그 이진 표현에서 자리(비트) 하나를 임의로 바꿀 수 있다. 이때 바뀐 수는 바꾸기 직전의 집합 AA에 속하지 않아야 한다.

예를 들어 55의 이진 표현은 010120101_2이다. 한 번의 연산으로 4번째, 3번째, 2번째, 1번째 비트를 바꾸면 각각 13=1101213 = 1101_2, 1=000121 = 0001_2, 7=011127 = 0111_2, 4=010024 = 0100_2이 될 수 있다.

집합 AA를 집합 BB와 같아지게 만드는 연산의 순서를 구하라. 두 집합이 같다는 것은 크기가 같고, AA의 원소 중 BB에 속하지 않는 원소가 없다는 뜻이다.

참고: 연산 횟수가 최소일 필요는 없지만, 문제의 제약 조건은 만족해야 한다.

입력

첫 줄에 집합의 크기 NN (1≤N≤2151 \le N \le 2^{15})이 주어진다.

둘째 줄에는 집합 AA의 원소인 서로 다른 정수 aia_i가 NN개 주어진다 (0≤ai<2150 \le a_i < 2^{15}).

셋째 줄에는 집합 BB의 원소인 서로 다른 정수 bib_i가 NN개 주어진다 (0≤bi<2150 \le b_i < 2^{15}).

출력

첫 줄에 필요한 연산의 횟수를 출력한다.

나머지 줄에는 정수 xx와 yy (0≤x,y<2150 \le x, y < 2^{15})를 출력한다. 이는 집합 AA의 xx를 yy로 바꾼다는 뜻이다. xx와 yy는 정확히 한 비트만 달라야 하며, 연산을 실행하는 시점에 x∈Ax \in A이고 y∉Ay \not\in A여야 한다.

예제3

  1. 예제 1

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

    입력
    3
    4 8 31
    0 4 8
    
    예상 출력
    5
    31 30
    30 28
    28 24
    24 16
    16 0
    
  3. 예제 3

    입력
    5
    0 1 2 4 5
    7 6 5 3 2
    
    예상 출력
    9
    1 3
    3 7
    0 1
    1 0
    2 6
    0 2
    7 3
    5 7
    4 5