언젠가 정렬이 될 수 있으면 좋겠네.

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

요약
인접한 두 원소가 서로소일 때만 자리를 바꿀 수 있는 수열에서, 도달 가능한 수열 중 사전 순으로 가장 작은 수열을 구한다.
난이도

어려움10점 중 8점

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

문제

NN개의 양의 정수로 이루어진 수열 A=\[A_1,⋯ ,A_N]A = \[A\_1, \cdots, A\_N]가 주어진다. 당신은 원하는 만큼 다음 조작을 할 수 있다. 조작을 하지 않는 것도 가능하다.

  • 수열에서 인접한 원소가 서로소일 때, 그 두 원소의 순서를 바꾼다.

두 수의 최대공약수가 11인 경우 두 수를 서로소라고 한다. 이때, 조작 이후 사전 순으로 최소인 수열 AA를 구해보자.

입력

첫째 줄에 수열의 길이 NN이 주어진다. (1≤N≤3,000)(1 \leq N \leq 3\\,000)

둘째 줄에 NN개의 양의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤109)(1 \leq A\_i \leq 10^9)

출력

조작 이후 사전 순으로 최소인 수열 AA를 한 줄에 공백으로 구분하여 출력한다.

힌트

어떤 수열이 다른 수열보다 사전 순으로 작다는 것은 다음을 의미한다.

  • 두 수열 중 첫 번째 수가 작은 쪽이 사전 순으로 작다.
  • 두 수열의 첫 번째 수가 같다면, 첫 번째 수를 빼고 두 수열을 다시 비교했을 때 사전 순으로 작은 쪽이 사전 순으로 작다.
  • 길이가 00인 수열은 다른 어떤 수열보다 사전 순으로 작다.

사전 순으로 최소인 수열은 다른 모든 수열보다 사전 순으로 작거나 같은 수열을 말한다.

예제1

  1. 예제 1

    입력
    5
    7 3 4 2 6
    
    예상 출력
    3 4 2 6 7