최솟값을 만들어요

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

요약
0부터 N-1까지를 한 번씩 써서 인접한 항의 XOR 합이 최소인 수열을 만들고, 그중 첫 항과 끝 항의 XOR이 최소가 되게 하는 수열을 출력한다.
난이도

보통10점 중 7점

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

문제

호반우는 NN 미만의 음이 아닌 정수를 하나씩 사용해서 ∑_i=1N−1a_i⊕a_i+1\displaystyle \sum\_{i = 1}^{N - 1} a\_{i} \oplus a\_{i+1}의 값이 최소가 되게 수열 a_1,a_2,a_3,⋯ ,a_Na\_{1},a\_{2},a\_{3} , \cdots ,a\_{N}을 만들려고 한다.  ⊕\oplus는 Bitwise XOR 연산을 의미한다.

수열을 만들 때 a_Na\_{N}과 a_1a\_{1}의 관계가 사용되지 않아 아쉬워하는 호반우를 위해 만들 수 있는 수열 중에서 a_N⊕a_1a\_{N} \oplus a\_{1}의 값이 가장 작은 수열을 찾아보자.

입력

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

출력

첫째 줄에 호반우가 만들 수 있는 조건을 만족하는 수열 중에서 a_N⊕a_1a\_{N} \oplus a\_{1}의 값이 가장 작은 수열을 공백을 두고 출력한다.

가능한 방법이 여러 가지라면 그중 아무거나 출력한다.

예제2

  1. 예제 1

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

    입력
    4
    
    예상 출력
    2 3 1 0