합이 같은 두 부분집합
시간 제한20초메모리 제한512 MB
서로 다른 수 최대 20개에서 합이 같은 부분집합 중 합이 가장 작은 경우를 사전 순으로 두 개 출력하고, 없으면 Impossible을 출력합니다.
문제
양의 정수로 이루어진 집합 가 주어진다. 원소의 합이 같은 서로 다른 두 부분집합을 찾아야 한다.
부분집합은 의 원소만 담은 집합이고, 두 부분집합은 원소 구성이 완전히 같지 않으면 서로 다르다. 두 부분집합 모두 공집합이 아니어야 한다. 두 부분집합이 원소를 공유해도 된다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 다음 개의 줄에 테스트 케이스가 한 줄에 하나씩 주어진다. 각 테스트 케이스는 의 원소 개수 으로 시작하고, 그 뒤에 의 원소인 서로 다른 양의 정수 개가 같은 줄에 이어진다.
제한
- 의 두 수는 서로 같지 않다.
- 의 각 수는 보다 작은 양의 정수다.
출력
각 테스트 케이스마다 먼저 Case #x:를 한 줄에 출력한다. 는 1부터 시작하는 테스트 케이스 번호다.
합이 같은 서로 다른 두 부분집합이 없으면 다음 줄에 Impossible을 출력한다.
있으면 다음 규칙으로 답을 하나만 정해서 출력한다.
- 합이 같은 서로 다른 두 부분집합이 존재하도록 하는 합 가운데 가장 작은 값을 라고 한다.
- 원소의 합이 인 부분집합을 모두 모으고, 각각을 원소를 오름차순으로 나열한 수열로 본다.
- 이 수열을 사전순으로 정렬해 첫 번째와 두 번째를 순서대로 한 줄에 하나씩 출력한다.
한 줄에는 부분집합의 원소를 오름차순으로, 공백 하나로 구분해 출력한다. 사전순 비교는 앞에서부터 원소를 하나씩 비교하고, 한쪽이 다른 쪽의 앞부분과 같으면 짧은 쪽이 앞선다.