주어진 수열을 중위 순회로 하는 이진 트리 중, 모든 노드가 자신의 조상들과 서로소인 트리가 존재하는지 판정하고 각 노드의 부모 인덱스를 출력한다.
어려움8트리분할 정복정수론구현아직 제출이 없습니다시간 제한6초메모리 제한512 MB서로소 트리는 뿌리 있는 이진 트리 가운데, 모든 노드에 양의 정수가 하나씩 적혀 있고 각 노드의 값이 그 노드의 모든 조상 노드의 값과 서로소인 트리다. 두 양의 정수는 최대공약수가 1일 때 서로소다.
뿌리 있는 이진 트리의 중위 순회 수열은 왼쪽 서브트리, 뿌리, 오른쪽 서브트리 순서로 재귀적으로 만든다.

위 그림의 트리는 서로소 트리다. 예를 들어 5가 적힌 노드의 값은 조상 노드에 적힌 9, 8, 7과 모두 서로소다.
수열 a1,a2,…,an이 주어진다. 이 수열을 중위 순회 수열로 갖는 서로소 트리가 있는지 판단하고, 있으면 그런 트리를 하나 만든다.
첫째 줄에 수열의 길이 n이 주어진다. (1≤n≤106)
둘째 줄에 수열을 이루는 정수 a1,…,an이 공백으로 구분되어 주어진다. (1≤ai≤107)
주어진 수열을 중위 순회 수열로 갖는 서로소 트리가 있으면 n개의 수를 한 줄에 공백으로 구분해 출력한다. i번째 수는 i번째 원소의 부모가 수열에서 몇 번째 원소인지를 나타내고, i번째 원소가 뿌리면 0이다.
조건을 만족하는 트리가 여러 개일 수 있으므로, 다음 규칙으로 만든 트리만 정답으로 인정한다. 연속한 구간 [l,r]에 해당하는 트리는 이렇게 만든다. 구간 안의 나머지 모든 값과 서로소인 위치 가운데 번호가 가장 작은 위치 m을 뿌리로 삼고, 왼쪽 서브트리는 구간 [l,m−1]에, 오른쪽 서브트리는 구간 [m+1,r]에 같은 규칙을 다시 적용해서 만든다. 전체 수열은 구간 [1,n]이다. 이 과정에서 어떤 구간에 그런 위치가 하나도 없으면, 주어진 수열을 중위 순회 수열로 갖는 서로소 트리는 존재하지 않는다.
그런 트리가 없으면 impossible을 출력한다.