두 수열 만들기

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

요약
서로 다른 2N개의 정수를 두 개의 N개짜리 수열로 나누어, 한 수열의 원소와 다른 수열의 원소가 정확히 한 비트만 다르지 않도록 한다.
난이도

보통10점 중 6점

유형
그래프, 비트 연산, DFS
정답자
아직 제출이 없습니다

문제

2N2N개의 정수 x_1,x_2,⋯ ,x_2Nx\_1, x\_2, \cdots, x\_{2N}이 주어진다.

다음 조건을 만족하며, x_1,x_2,⋯ ,x_2Nx\_1, x\_2, \cdots, x\_{2N}에서 중복없이 각각 NN개를 사용하여 만들 수 있는 수열 A=A_1,A_2,⋯ ,A_NA = A\_1, A\_2, \cdots, A\_N과 수열 B=B_1,B_2,…,B_NB = B\_1, B\_2, \dots, B\_N을 출력하시오.

  • 임의의 A_iA\_i에 대해 A_i⊕x=2j (jA\_i \oplus x = 2^j \ (j는 음이 아닌 정수))를 만족하는 xx가 수열 BB에 없어야 한다.
  • 임의의 B_iB\_i에 대해 B_i⊕x=2j (jB\_i \oplus x = 2^j \ (j는 음이 아닌 정수))를 만족하는 xx가 수열 AA에 없어야 한다.

입력

첫째 줄에 NN이 주어진다. (1≤N≤2,000)(1 \leq N \leq 2\\,000)

둘째 줄에 x_1,x_2,⋯ ,x_2Nx\_1, x\_2, \cdots, x\_{2N}이 공백으로 구분되어 주어진다. (0≤x_i<220)(0 \leq x\_i < 2^{20})

입력으로 주어지는 모든 x_ix\_i는 서로 다르다.

출력

첫째 줄에 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N을 공백으로 구분하여 출력한다.

둘째 줄에 B_1,B_2,⋯ ,B_NB\_1, B\_2, \cdots, B\_N을 공백으로 구분하여 출력한다.

수열을 출력할 때 출력하는 순서는 상관없다.

만약 수열을 만들 수 있는 경우가 여러 가지라면 그중 아무거나 출력하고, 수열을 만들 수 없는 경우에는 -1을 대신 출력한다.

힌트

⊕\oplus은 Bitwise XOR을 뜻하며, 음이 아닌 두 정수 A,BA, B의 A⊕BA \oplus B는 다음과 같이 정의된다.

  • 이진법으로 생각했을 때, AA의 2k2^k의 자릿수와 BB의 2k2^k의 자릿수가 서로 다르면 A⊕BA \oplus B의 2k2^k의 자릿수가 11이고, 같으면 A⊕BA \oplus B의 2k2^k의 자릿수가 00이다. (단, k≥0k \geq 0)
  • 예를 들어 12⊕1012 \oplus 10은 12=1100_(2),10=1010_(2)12 = 1100\_{(2)}, 10 = 1010\_{(2)}이므로 1100_(2)⊕1010_(2)=0110_(2)=61100\_{(2)} \oplus 1010\_{(2)} = 0110\_{(2)} = 6이다.

예제2

  1. 예제 1

    입력
    3
    1 2 6 9 11 18
    
    예상 출력
    2 6 18
    1 9 11
    
  2. 예제 2

    입력
    3
    1 2 4 9 10 12
    
    예상 출력
    -1