단어 게임

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

문제

소들이 단어 타일 게임을 하고 있지만, 안타깝게도 대회 수준으로 겨룰 만한 어휘력이 없습니다. Bessie는 첫 수를 두는 것만 도와주기를 바랍니다.

$N$개($3 \le N \le 10$)의 문자가 놓인 랙(rack, 타일을 담는 받침대)과 $D$개($10 \le D \le 50000$)의 단어로 이루어진 사전이 주어집니다. 랙의 문자는 중복될 수 있고, 하나 이상의 빈 "와일드카드" 타일을 포함할 수도 있습니다. 사전을 검색하여 Bessie가 만들 수 있는 단어를 모두 출력하세요.

랙에 놓일 수 있는 기호는 대문자 'A'..'Z'와 와일드카드를 뜻하는 '#'까지 모두 27가지입니다. '#'는 임의의 한 글자를 대신할 수 있습니다. 한 랙에 '#'가 두 개 있으면 각각 서로 다른 글자를 나타낼 수 있습니다.

어떤 단어는 그 단어의 각 글자를 랙의 타일과 하나씩 짝지을 수 있을 때 만들 수 있습니다. 즉, 단어를 이루는 글자들의 구성(중복 포함)이 랙에 있는 글자 구성의 부분집합이어야 하며, 부족한 글자는 '#' 하나가 한 글자씩 채워 줄 수 있습니다. Bessie의 랙으로는 항상 최소한 하나의 단어를 만들 수 있습니다. 사전의 각 단어는 서로 다르며 모두 대문자입니다.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 $N$과 $D$.
  • 둘째 줄: Bessie의 랙에 있는 $N$개의 문자 (사이에 공백 없음).
  • 이후 $D$개의 줄: 각 줄에 사전의 단어가 하나씩 주어집니다.

출력

  • Bessie가 만들 수 있는 단어를 한 줄에 하나씩 출력합니다. 단어는 사전에 나타난 순서(입력 순서)대로 출력합니다.