합이 같은 두 부분집합

시간 제한20초메모리 제한512 MB

요약
서로 다른 수 최대 20개에서 합이 같은 부분집합 중 합이 가장 작은 경우를 사전 순으로 두 개 출력하고, 없으면 Impossible을 출력합니다.
난이도

보통10점 중 5점

유형
완전 탐색, 해시맵, 정렬
정답자
아직 제출이 없습니다

문제

양의 정수로 이루어진 집합 SS가 주어진다. 원소의 합이 같은 서로 다른 두 부분집합을 찾아야 한다.

부분집합은 SS의 원소만 담은 집합이고, 두 부분집합은 원소 구성이 완전히 같지 않으면 서로 다르다. 두 부분집합 모두 공집합이 아니어야 한다. 두 부분집합이 원소를 공유해도 된다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 다음 TT개의 줄에 테스트 케이스가 한 줄에 하나씩 주어진다. 각 테스트 케이스는 SS의 원소 개수 NN으로 시작하고, 그 뒤에 SS의 원소인 서로 다른 양의 정수 NN개가 같은 줄에 이어진다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤N≤201 \le N \le 20
  • SS의 두 수는 서로 같지 않다.
  • SS의 각 수는 101210^{12}보다 작은 양의 정수다.

출력

각 테스트 케이스마다 먼저 Case #x:를 한 줄에 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.

합이 같은 서로 다른 두 부분집합이 없으면 다음 줄에 Impossible을 출력한다.

있으면 다음 규칙으로 답을 하나만 정해서 출력한다.

  1. 합이 같은 서로 다른 두 부분집합이 존재하도록 하는 합 가운데 가장 작은 값을 ss라고 한다.
  2. 원소의 합이 ss인 부분집합을 모두 모으고, 각각을 원소를 오름차순으로 나열한 수열로 본다.
  3. 이 수열을 사전순으로 정렬해 첫 번째와 두 번째를 순서대로 한 줄에 하나씩 출력한다.

한 줄에는 부분집합의 원소를 오름차순으로, 공백 하나로 구분해 출력한다. 사전순 비교는 앞에서부터 원소를 하나씩 비교하고, 한쪽이 다른 쪽의 앞부분과 같으면 짧은 쪽이 앞선다.

예제2

  1. 예제 1

    입력
    2
    20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    20 120 266 858 1243 1657 1771 2328 2490 2665 2894 3117 4210 4454 4943 5690 6170 7048 7125 9512 9600
    
    예상 출력
    Case #1:
    1 2
    3
    Case #2:
    120 2894
    1243 1771
    
  2. 예제 2

    입력
    2
    3 3 1 2
    1 7
    
    예상 출력
    Case #1:
    1 2
    3
    Case #2:
    Impossible