만드는 중입니다

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

순열 구하기

면접 대비

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

요약
순열 P의 정렬된 접두사들을 P와 함께 XOR한 배열 B가 주어질 때, 원래의 순열 P를 복원합니다.
난이도

보통10점 중 5점

유형
구현, 시뮬레이션, 비트 연산
정답자
아직 제출이 없습니다

문제

11부터 NN까지의 정수로 이루어진 길이 NN의 순열 PP가 있다. 배열 AiA_{i}는 PP의 처음 ii(1≤i≤N1 \le i \le N)개 원소를 정렬한 길이 ii의 배열이다. 배열 BB는 A1⊕A2⊕⋯⊕AN−1⊕AN⊕PA_{1} \oplus A_{2} \oplus \cdots \oplus A_{N-1} \oplus A_{N} \oplus P 연산을 수행한 새로운 배열이다. 두 배열의 xor 연산은 다음 절차로 진행한다.

  1. 두 배열의 길이가 같으면 같은 위치의 원소끼리 xor 한다. A⊕B=[A1⊕B1,A2⊕B2,⋯ ,AN⊕BN]A \oplus B = [A_{1} \oplus B_{1}, A_{2} \oplus B_{2}, \cdots, A_{N} \oplus B_{N}]

  2. 길이가 NN인 배열 AA와 길이가 MM인 배열 BB가 있고 N<MN < M이면 다음과 같이 연산한다. A⊕B=[A1⊕B1,⋯ ,AN⊕BN,BN+1,⋯ ,BM]A \oplus B = [A_{1} \oplus B_{1}, \cdots, A_{N} \oplus B_{N}, B_{N+1}, \cdots, B_{M}]

배열 BB가 주어졌을 때 원래 순열 PP를 구하는 프로그램을 작성하시오.

여기서 ⊕\oplus는 비트 단위 xor 연산을 뜻한다. 자세한 정의는 힌트에 있다.

입력

첫째 줄에 순열의 길이 NN이 주어진다. (1≤N≤50001 \le N \le 5000)

둘째 줄에 배열의 원소 BiB_{i}가 공백으로 구분되어 주어진다. 순열 PP로 복원할 수 있는 배열 BB만 주어진다. BiB_{i}는 항상 2312^{31}보다 작은 음이 아닌 정수다.

출력

첫째 줄에 순열 PP의 원소를 공백으로 구분해 출력한다.

힌트

비트 단위 xor 연산은 두 이진수 값을 자리마다 계산하는 연산이다. 먼저 두 값을 이진수로 나타낸다. 그다음 각 자릿수를 비교한다. 두 자릿수가 다르면 결과는 1이고, 같으면 0이다.

예를 들어 12⊕612 \oplus 6의 값은 1010이다. 1212는 이진수로 1100(2)1100_{(2)}이고, 66은 0110(2)0110_{(2)}이다. 계산 과정은 아래 그림과 같다. 결과는 1010(2)1010_{(2)}, 즉 1010이다.

예제2

  1. 예제 1

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

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