Bitovi
시간 제한1초메모리 제한1024 MB
크기 N인 두 집합 A와 B가 주어졌을 때, 각 이동의 결과 값이 현재 A에 없도록 한 비트씩 바꿔 A를 B로 만드는 과정을 출력합니다.
문제
닭이 먼저인가, 달걀이 먼저인가? 백만장자로 100년을 사는 것과 가난하게 7일을 사는 것 중 어느 쪽이 나은가? 체스 그랜드마스터는 어떻게 되는가? 블라인드는 어떻게 올리는가? 기말고사는 어떻게 통과하는가? 드래곤은 어떻게 훈련시키는가? 이런 질문들은 대회가 끝난 뒤에나 고민할 만한 흥미로운 질문이지만, 여기서는 조금 덜 흥미로운 컴퓨터 과학 문제를 하나 낸다.
크기가 인 두 수의 집합 와 가 주어진다. 한 번의 연산에서 집합 의 원소 하나를 골라, 그 이진 표현에서 자리(비트) 하나를 임의로 바꿀 수 있다. 이때 바뀐 수는 바꾸기 직전의 집합 에 속하지 않아야 한다.
예를 들어 의 이진 표현은 이다. 한 번의 연산으로 4번째, 3번째, 2번째, 1번째 비트를 바꾸면 각각 , , , 이 될 수 있다.
집합 를 집합 와 같아지게 만드는 연산의 순서를 구하라. 두 집합이 같다는 것은 크기가 같고, 의 원소 중 에 속하지 않는 원소가 없다는 뜻이다.
참고: 연산 횟수가 최소일 필요는 없지만, 문제의 제약 조건은 만족해야 한다.
입력
첫 줄에 집합의 크기 ()이 주어진다.
둘째 줄에는 집합 의 원소인 서로 다른 정수 가 개 주어진다 ().
셋째 줄에는 집합 의 원소인 서로 다른 정수 가 개 주어진다 ().
출력
첫 줄에 필요한 연산의 횟수를 출력한다.
나머지 줄에는 정수 와 ()를 출력한다. 이는 집합 의 를 로 바꾼다는 뜻이다. 와 는 정확히 한 비트만 달라야 하며, 연산을 실행하는 시점에 이고 여야 한다.