고속도로 위의 마을

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

문제

곧게 뻗은 고속도로 위에 여러 개의 마을이 일렬로 놓여 있다. 이 고속도로에는 분기점이 없어서 모든 마을은 한 직선 위에 순서대로 자리 잡는다.

이웃한 마을 사이의 거리를 모두 알고 있으면, 그 값들을 이용해 임의의 두 마을 사이의 거리도 계산할 수 있다. 예를 들어 마을 다섯 개 A, B, C, D, E가 순서대로 놓여 있고 이웃한 마을 사이의 거리가 주어지면, 이로부터 모든 마을 쌍 사이의 거리표(총 $N(N-1)/2$개)를 만들 수 있다.

이제 반대로, 모든 마을 쌍 사이의 거리 $N(N-1)/2$개가 모두 주어졌을 때 마을들이 놓인 순서를 정하고 이웃한 두 마을 사이의 거리($N-1$개)를 복원하는 프로그램을 작성하라. 같은 거리 집합을 만들어 내는 배치가 여러 가지일 수 있으며, 이 경우 가능한 모든 배치를 찾아야 한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 마을의 수 $N$ ($2 \le N \le 20$)이 주어진다. 그 다음에는 모든 마을 쌍 사이의 거리 $N(N-1)/2$개의 정수가 공백이나 줄바꿈으로 구분되어 내림차순(값이 큰 것부터 작은 것 순, 같은 값이 이어질 수 있음)으로 주어진다. 각 거리는 $1$ 이상 $400$ 이하의 자연수이며, 가장 큰 거리 값은 가장 왼쪽 마을과 가장 오른쪽 마을 사이의 거리이다.

마지막 줄에는 $0$이 하나 주어지며, 이는 입력의 끝을 뜻한다.

출력

각 테스트 케이스마다 이웃한 마을 사이의 거리 $N-1$개를 공백으로 구분하여 출력한다. 정답이 여러 가지이면, 각 정답을 거리들의 수열로 보고 사전순으로 정렬하여 한 줄에 하나씩 모두 출력한다. 가능한 정답이 하나도 없으면 아무것도 출력하지 않는다. 한 테스트 케이스의 정답을 모두 출력한 뒤에는 -----을 한 줄에 출력한다.