아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

국제 파티

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

요약
최대 다섯 개의 언어를 골라 모든 학생 쌍이 그중 하나의 언어를 함께 말할 수 있게 하는 최소 언어 집합을 찾고, 불가능하면 Impossible을 출력한다.
난이도

보통10점 중 6점

유형
완전 탐색, 조합론, 그리디, 비트 연산
정답자
아직 제출이 없습니다

문제

Isaac H. Ives는 국제 학생 파티에 참석했다(어쩌면 여자 친구를 찾으려는 것일지도 모른다). 파티에 온 학생들은 맛있는 음식과 음료와 함께 그룹을 지어 대화하는 것을 즐긴다. 하지만 학생들이 전 세계에서 모여든 만큼, 그룹의 모든 학생이 구사하는 언어가 하나도 없을 수도 있다. 이런 그룹에서는 일부 학생이 통역을 맡아야 하는데, 통역 때문에 생기는 공백은 대화의 재미를 떨어뜨린다.

말할 필요도 없이 학생들은 신나는 대화를 원한다. 대화를 최대한 신나게 하기 위해 Isaac은 다음과 같은 규칙을 제안했다. 대화에 사용하는 언어의 수는 가능한 한 적어야 하며, 다섯 개를 넘지 않아야 한다. 많은 학생이 그의 제안에 동의했지만, 각 학생이 어떤 언어를 구사해야 하는지 찾는 일은 쉽지 않다. 그래서 그는 당신에게 도움을 청한다.

각 학생이 구사하는 언어 목록이 주어졌을 때, 대화가 가능하도록 하는 최소 언어 집합을 출력하는 프로그램을 작성하라.

입력

입력은 여러 데이터 세트로 이루어진다.

각 데이터 세트의 첫 줄에는 공백으로 구분된 두 정수 N (1 ≤ N ≤ 30)과 M (2 ≤ M ≤ 20)이 주어지며, 이는 각각 언어의 수와 학생의 수를 나타낸다. 다음 N개 줄에는 언어 이름이 한 줄에 하나씩 주어진다. 그다음 M개 줄은 그룹의 학생을 설명한다. i번째 줄은 i번째 학생이 구사하는 언어의 수 Ki와, 공백 하나로 구분된 Ki개의 언어 이름으로 이루어진다. 각 언어 이름은 최대 스무 개의 알파벳으로 구성된다.

두 개의 0이 들어 있는 줄은 입력의 끝을 나타내며 데이터 세트의 일부가 아니다.

출력

구사해야 하는 언어의 최소 수 L과, 그 뒤에 L개의 언어 이름을 아무 순서로나 출력한다. 각 언어 이름은 한 줄에 하나씩 출력해야 한다. 같은 크기의 집합이 두 개 이상 가능한 경우에는 그중 아무거나 출력해도 된다. 그룹이 다섯 개 이하의 언어로 대화를 즐기는 것이 불가능하면 “Impossible”만 있는 줄을 하나 출력한다(따옴표는 출력하지 않는다).

데이터 세트 사이에는 빈 줄을 하나 출력한다.

예제1

  1. 예제 1

    입력
    3 4
    English
    French
    Japanese
    1 English
    2 French English
    2 Japanese English
    1 Japanese
    2 2
    English
    Japanese
    1 English
    1 Japanese
    6 7
    English
    Dutch
    German
    French
    Italian
    Spanish
    1 English
    2 English Dutch
    2 Dutch German
    2 German French
    2 French Italian
    2 Italian Spanish
    1 Spanish
    0 0
    
    예상 출력
    2
    English
    Japanese
    
    Impossible
    
    Impossible