페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8595
스페셜 저지
서브태스크

점프 1s 1024MB

문제

2 이상의 N에 대해 1부터 N까지의 번호가 붙은 N개의 정점이 번호 순서대로 일직선상에 놓여있고,

i(1 ≤ i ≤ N -1)에 대해 정점 ii+ 1을 양방향으로 잇는 간선이 있는 상황을 고려하자.

예를 들어, N = 5인 경우에는 아래 그림과 같이 정점과 간선이 배치된다.

정올이는 이 그래프 위에서 점프하여 이동할 수 있다.

정올이가 어느 한 정점에서 다른 정점으로 점프하면, 그 사이에 있는 모든 간선을 한 번씩 지나간다.

예를 들어:

  • 정올이가 점점 4에서 2로 점프했다면, 정올이는 정점 3과 4 사이의 간선과 점잼 2와 3 사이의 간선을 각각 한 번씩 지나간다.

  • 정올이가 정점 3메서 4로 점프했다면 정점 3과 4 사이의 간선을 한 번 지나간다.

정올이는 정점 1에서 시작해 N - 1번의 점프를 거쳐 정점 N에 도착했고,
그 과정에서 모든 정점을 정확히 한 번씩 방문했다. (처음에 정점 1에 있었던 것도 방문으로 간주한다.)

다시 말해, 정올이가 정점들을 방문한 순서를 p_1 → p_2 → …→p_{N-1} →p_N 이라고 할 때, p_1 =1이고, p_N = N 이며, \{p_1,p_2, \cdots ,p_N\}= \{1,2, … ,N\}이다.

이때, 정올이가 점프하는 과정에서 각 i(1 ≤ i≤ N -1)에 대해 정점 ii+ 1 사이 간선을 지나간 횟수를 c_i라고 하자.

여를 들어, 정올이가 (p_1 =1) → (p_2 =3) → (p_3 =4) → (p_4 =2) → (p_5 =5) 순서로 방문했다면, c_1 = 1, c_2 =3, c_3 =3, c_4 = 1이 된다.

정올이가 정점들을 방문하면서 각 간선을 지난 횟수를 나타내는 수열 c= (c_1, c_2, \cdots , c_{N-1})이 주어졌을 때,
이로부터 정올이의 방문 순서 p_1, p_2, \cdots, p_N을 구하는 프로그램을 작성하라.

주어지는 수열 c는 항상 어떤 방문 순서에 의해 만들어진 것이므로, 이를 만족하는 방문 순서는 항상 존재한다.

만약 가능한 방문 순서가 여러 가지라면 아무것이나 하나 구하면 된다.


입력

첫 번째 줄에 정점의 개수 N이 주어진다.

두 번째 줄에 N-1개의 정수 c_1, c_2, \cdots, c_{N-1}이 공백을 사이에 두고 주어진다.

이때, c_i는 정점 ii+1 사이의 간선을 지나간 횟수를 의미한다.

[제약 조건]

  • 주어지는 모든 수는 정수이다.

  • 2 \le N \le 200\ 000

  • 1 \le i \le N-1인 모든 i에 대해 1\le c_i \le 10^{18}

  • 가능한 방문 순서가 존재하는 입력만 주어진다.


출력

정올이의 가능한 방문 순서 p_1, p_2, \cdots, p_N을 공백으로 구분하여 출력한다. 만약 가능한 방문 순서가 여러 가지라면 아무것이나 하나 출력한다.


부분문제

번호 점수 조건
#110점

N \le 10

#210점

1 \le i \le N-1인 모든 i에 대해 c_i \le 3

#315점

N \ge 4 이며, 2 이상 N-2 이하의 어떤 정수 M이 존재해, c_1 \le c_2 \le \cdots \le c_M이고, c_M \ge c_{M-1} \ge \cdots \ge c_1이다. 다시 말해, c_i가 단조 증가하다가 단조 감소하는 형태를 가진다.

#435점

N \le 300

#530점

추가 제약 조건 없음


예제 #1

5
1 3 3 1
1 3 4 2 5

예제 #2

7
1 3 3 5 3 1
1 6 2 3 5 4 7


출처

2025 KOI 2차 고1

로그인해야 코드를 작성할 수 있어요.