대칭 XOR

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

요약
모든 대칭쌍 i와 N-i+1의 XOR 값이 같아지도록 1부터 N까지의 순열을 만들고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
수학, 비트 연산, 그리디, 구현
정답자
아직 제출이 없습니다

문제

양의 정수 NN이 주어질 때, 아래 조건을 만족하는 11부터 NN까지의 서로 다른 정수로 이루어진 길이 NN의 순열 P=P_1,P_2,⋯ ,P_NP={P\_1,P\_2,\cdots,P\_N}을 만들어 보자.

  • 모든 1≤i,j≤N1\le i, j \le N에 대해 P_i⊕P_N−i+1=P_j⊕P_N−j+1P\_i\oplus P\_{N-i+1} = P\_j\oplus P\_{N-j+1}

입력

첫째 줄에 양의 정수 NN이 주어진다. (1≤N≤500,000)(1 \le N \le 500\\,000)

출력

조건을 만족하는 순열이 존재하면 P_1,P_2,⋯ ,P_NP\_1, P\_2, \cdots, P\_N을 공백으로 구분하여 한 줄에 출력한다. 가능한 순열이 여러 개라면 아무거나 하나를 출력해도 된다.

조건을 만족하는 순열이 없으면 -1을 출력한다.

힌트

⊕\oplus은 Bitwise XOR을 나타내는 기호이다. Bitwise XOR은 각 비트 자리에서 두 비트를 비교하여, 같으면 00으로, 다르면 11로 만든다.

즉, aa ⊕\oplus bb의 i번째 비트는 aa와 bb의 ii번째 비트가 다를 때만 11이다.

ex) 13$$(1101\_2) ⊕\oplus 10$$(1010\_2) = 7$$(0111\_2)

예제3

  1. 예제 1

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

    입력
    6
    
    예상 출력
    4 6 2 5 1 3
    
  3. 예제 3

    입력
    7
    
    예상 출력
    -1