단어 게임

시간 제한1초메모리 제한128 MB

요약
와일드카드가 섞인 최대 10개의 글자 타일과 최대 50000개의 단어 사전이 주어질 때, 타일로 만들 수 있는 단어를 사전 순서대로 모두 출력한다.
난이도

보통10점 중 4점

유형
구현, 완전 탐색, 문자열, 배열
정답자
아직 제출이 없습니다

문제

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

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

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

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

입력

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

출력

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

예제3

  1. 예제 1

    입력
    4 7
    IAFR
    AIR
    FAIR
    FAR
    FIR
    IF
    FRIAR
    GRID
    
    예상 출력
    AIR
    FAIR
    FAR
    FIR
    IF
    
  2. 예제 2

    입력
    3 6
    CT#
    CAT
    ACT
    CUT
    DOG
    BAT
    TT
    
    예상 출력
    CAT
    ACT
    CUT
    TT
    
  3. 예제 3

    입력
    3 5
    AAB
    AA
    AAA
    BAA
    AB
    ABB
    
    예상 출력
    AA
    BAA
    AB