문제없는 문제

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

ACM 프로그래밍 대회에 나가는 선수들은 널리 쓰이는 여러 알고리즘을 두루 알고 있어야 한다. 그래서 대회를 준비할 때는 되도록 다양한 알고리즘이 골고루 쓰이도록 문제를 낸다.

어떤 문제 세트 안에서 한 번도 쓰이지 않는 알고리즘이 하나라도 있다면, 그 세트는 "문제 있는" 문제 세트다. 예를 들어 동적 계획법(DP)을 쓰는 문제가 하나도 없거나 그래프 관련 알고리즘을 쓰는 문제가 하나도 없다면, 그 세트에는 문제가 있는 것이다.

이번에는 미리 준비해 둔 문제들의 부분집합으로 "문제 없는" 문제 세트를 만들려고 한다. 한 알고리즘이 여러 번 쓰이는 것은 괜찮지만, 정해진 모든 알고리즘이 적어도 한 번씩은 쓰여야 한다.

문제를 만드는 일은 매우 고되므로, 조건을 만족하는 세트 중에서 문제 수가 가장 적은 것을 찾아야 한다. 그래야 남은 문제를 다음 대회에 쓸 수 있다.

입력

첫 줄에 테스트 케이스의 수 $K$가 주어진다.

각 테스트 케이스의 첫 줄에는 두 정수 $M$과 $N$이 주어진다. ($1 \le M, N \le 20$)

$M$은 대회에서 반드시 사용해야 하는 알고리즘의 개수이고, $N$은 준비해 둔 문제의 개수이다.

사용해야 하는 알고리즘은 $1$부터 $M$까지의 정수로 번호가 매겨져 있고, 문제는 첫 번째부터 차례대로 $A$, $B$, $C$, $\dots$ 로 이름을 붙인다.

이어지는 $N$개의 줄에는 첫 번째 문제부터 $N$번째 문제까지 각 문제가 사용하는 알고리즘 번호들이 공백으로 구분되어 주어진다.

출력

각 테스트 케이스마다 먼저 Data Set K: 를 출력한다. 여기서 $K$는 $1$부터 시작하는 테스트 케이스 번호이다. 그 뒤에 한 칸을 띄우고, $1$부터 $M$까지의 모든 알고리즘을 포함하는 가장 적은 수의 문제로 이루어진 세트에 속한 문제들을 이름의 사전순으로, 한 칸씩 띄어 출력한다.

조건을 만족하는 최소 크기의 세트가 여러 개라면, 문제 이름을 사전순으로 나열했을 때 가장 앞서는 세트를 출력한다.

모든 테스트 케이스에는 항상 답이 존재한다.

테스트 케이스와 테스트 케이스 사이에는 빈 줄을 하나 출력한다.