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$까지의 모든 알고리즘을 포함하는 가장 적은 수의 문제로 이루어진 세트에 속한 문제들을 이름의 사전순으로, 한 칸씩 띄어 출력한다.
조건을 만족하는 최소 크기의 세트가 여러 개라면, 문제 이름을 사전순으로 나열했을 때 가장 앞서는 세트를 출력한다.
모든 테스트 케이스에는 항상 답이 존재한다.
테스트 케이스와 테스트 케이스 사이에는 빈 줄을 하나 출력한다.