아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

카드 뒤집기

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

요약
카드 1부터 N을 규칙에 따라 모두 뒤집을 수 있는지 판정하고, 가능하면 배열과 뒤집는 순서를 출력한다.
난이도

보통10점 중 6점

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

문제

11부터 NN까지 서로 다른 정수가 적혀있는 카드를 NN장 가지고 있다. 각 카드에는 앞면과 뒷면이 존재한다. 카드의 앞면에는 숫자가 적혀있고, 뒷면에는 카드의 무늬가 그려져 있다.

NN장의 카드를 원하는 순서대로 앞면이 보이도록 일렬로 배열한다. 이제 아래의 규칙에 따라 카드를 뒤집을 것이다.

  1. 맨 먼저 한 장의 카드를 골라 뒷면으로 뒤집는다.
  2. 가장 마지막으로 뒤집은 카드에 적힌 번호를 xx라 하자. 마지막으로 뒤집은 카드에서 왼쪽으로 xx장 떨어진 앞면 카드 또는 오른쪽으로 xx장 떨어진 앞면 카드를 뒤집는다. 만약 해당하는 카드가 없으면 뒤집는 과정을 종료한다.
  3. 2번 단계가 종료될 때까지 뒤집는 과정을 반복한다.

카드의 장수 NN이 주어질 때, 모든 카드를 뒤집을 수 있도록 배열할 수 있는지 알고 싶다. 따라서 모든 카드를 뒤집을 수 있는 배치가 존재하는지 여부를 출력하고, 그러한 배치가 존재한다면 카드를 배열하는 방법과 뒤집는 순서를 출력해야 한다.

입력

첫 번째 줄에 카드의 장수 NN이 주어진다. (1≤N≤200 000)(1 \le N \le 200\ 000)

출력

첫 번째 줄에 모든 카드를 뒤집을 수 있도록 배열할 수 있는지를 출력해야 한다. 만약 가능하다면 YES, 불가능하다면 NO를 출력해야 한다.

만약 모든 카드를 뒤집을 수 있도록 배열할 수 있다면, 두 번째 줄에 카드의 배열 b_1,b_2,...,b_nb\_1, b\_2, ..., b\_n을 출력한다. b_ib\_i는 ii번째 카드에 적혀있는 숫자를 의미한다.

이후 세 번째 줄에 카드를 뒤집는 순서 c_1,c_2,...,c_nc\_1, c\_2, ..., c\_n을 출력한다. c_ic\_i는 ii번째로 뒤집을 카드의 위치를 의미한다.

만약 가능한 배열 방법 또는 뒤집는 순서가 여러 가지일 경우 가능한 하나만 출력하면 된다.

예제1

  1. 예제 1

    입력
    3
    
    예상 출력
    YES
    1 3 2
    3 1 2