고속도로 위의 마을
시간 제한1초메모리 제한128 MB
일직선 위에 있는 N개 마을의 모든 쌍의 거리 집합이 주어질 때, 그 거리 집합을 정확히 만들어내는 인접 마을 간 거리들을 모두 찾습니다.
문제
곧게 뻗은 고속도로 위에 여러 개의 마을이 일렬로 놓여 있다. 이 고속도로에는 분기점이 없어서 모든 마을은 한 직선 위에 순서대로 자리 잡는다.
이웃한 마을 사이의 거리를 모두 알고 있으면, 그 값들을 이용해 임의의 두 마을 사이의 거리도 계산할 수 있다. 예를 들어 마을 다섯 개 A, B, C, D, E가 순서대로 놓여 있고 이웃한 마을 사이의 거리가 주어지면, 이로부터 모든 마을 쌍 사이의 거리표(총 개)를 만들 수 있다.
이제 반대로, 모든 마을 쌍 사이의 거리 개가 모두 주어졌을 때 마을들이 놓인 순서를 정하고 이웃한 두 마을 사이의 거리(개)를 복원하는 프로그램을 작성하라. 같은 거리 집합을 만들어 내는 배치가 여러 가지일 수 있으며, 이 경우 가능한 모든 배치를 찾아야 한다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 마을의 수 ()이 주어진다. 그 다음에는 모든 마을 쌍 사이의 거리 개의 정수가 공백이나 줄바꿈으로 구분되어 내림차순(값이 큰 것부터 작은 것 순, 같은 값이 이어질 수 있음)으로 주어진다. 각 거리는 이상 이하의 자연수이며, 가장 큰 거리 값은 가장 왼쪽 마을과 가장 오른쪽 마을 사이의 거리이다.
마지막 줄에는 이 하나 주어지며, 이는 입력의 끝을 뜻한다.
출력
각 테스트 케이스마다 이웃한 마을 사이의 거리 개를 공백으로 구분하여 출력한다. 정답이 여러 가지이면, 각 정답을 거리들의 수열로 보고 사전순으로 정렬하여 한 줄에 하나씩 모두 출력한다. 가능한 정답이 하나도 없으면 아무것도 출력하지 않는다. 한 테스트 케이스의 정답을 모두 출력한 뒤에는 -----을 한 줄에 출력한다.