이상한 정렬

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

요약
어떤 원소도 바로 앞 원소보다 정확히 1만큼 크지 않도록 수열을 재배열하되, 사전순으로 가장 작은 순서를 출력하고 불가능하면 No solution을 출력한다.
난이도

보통10점 중 7점

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

문제

정수 NN개로 이루어진 수열 a1,a2,…,aNa_1, a_2, \dots, a_N이 주어진다. 바로 앞 원소보다 정확히 11만큼 큰 원소가 어디에도 나타나지 않도록 이 수들을 재배열하라. 즉, 최종 수열은 1≤i<N1 \le i < N인 모든 ii에 대해 ai+1≠ai+1a_{i+1} \neq a_i + 1을 만족해야 한다.

조건을 만족하는 배열이 여러 개라면, 사전순으로 가장 앞서는 것을 출력한다.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 두 줄이다. 첫 줄에는 수열의 길이 NN (1≤N≤500001 \le N \le 50000)이 주어진다. 둘째 줄에는 NN개의 정수 a1,a2,…,aNa_1, a_2, \dots, a_N이 공백 하나로 구분되어 주어지며, 각 정수는 ∣ai∣≤109|a_i| \le 10^9을 만족한다. 00 하나만 있는 줄은 입력의 끝을 나타내며 처리하지 않는다.

출력

각 데이터 집합에 대해 결과 수열을 한 줄에 출력한다. 정수는 공백 하나로 구분한다. 조건을 만족하는 배열이 존재하지 않으면 대신 No solution을 출력한다.

예제3

  1. 예제 1

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

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

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