도리의 전화번호부
시간 제한1초메모리 제한128 MB
단어 사전과 전화번호가 주어질 때, 사전 단어들을 공백으로 이어 붙여 전화번호를 인코딩하는 모든 방법을 사전순으로 출력한다.
문제
도리는 단기 기억 상실을 겪고 있습니다. 전화번호는 그녀에게 가장 큰 수수께끼 중 하나입니다. 친구 말린에게 전화를 걸려고 할 때마다 그의 번호를 좀처럼 떠올리지 못하죠. 하지만 단어는 비교적 쉽게 기억하므로(그녀는 외국어까지 구사합니다), 전화번호를 단어로 바꾸어 그녀를 도와줍시다.
전화번호를 더 쉽게 외울 수 있도록, 숫자를 단어로 부호화하는 대응 규칙을 사용합니다. 글자에서 숫자로의 대응은 다음과 같습니다.
E JNQ RWX DSY FT AM CIV BKU LOP GHZ
e jnq rwx dsy ft am civ bku lop ghz
0 1 2 3 4 5 6 7 8 9
주어진 전화번호에 대해, 단어들로 만들 수 있는 모든 부호화를 찾아 사전순(알파벳순)으로 정렬하여 출력하는 프로그램을 작성하세요. 전화번호는 붙임표 -, 빗금 /, 그리고 숫자로 이루어진 임의의 문자열입니다. 붙임표와 빗금은 부호화되지 않습니다. 단어는 한 줄에 하나씩 주어지는 사전에서 가져옵니다. 이 사전으로 만들 수 있으면서 전화번호와 정확히 일치하는 모든 부호화를 출력해야 합니다. 사전의 단어는 글자(대문자 또는 소문자), 붙임표 -, 큰따옴표 "로 이루어질 수 있습니다. 부호화에는 글자만 사용하지만, 단어는 사전에 적힌 형태 그대로 출력해야 합니다. 사전의 단어는 글자가 아닌 문자로 시작하지 않습니다. 전화번호의 부호화는 한 단어로 이루어질 수도 있고, 공백으로 구분된 여러 단어로 이루어질 수도 있습니다.
입력
첫째 줄에 시나리오의 개수가 주어집니다.
각 시나리오는 사전에 있는 단어의 개수가 적힌 줄로 시작합니다. 그 다음 사전의 단어들이 한 줄에 하나씩 주어집니다. 이어서 전화번호의 개수가 주어지고, 전화번호들이 한 줄에 하나씩 뒤따릅니다.
사전의 모든 단어와 모든 전화번호의 길이는 최대 50자입니다. 사전의 단어 개수는 최대 75000개이며, 한 시나리오의 전화번호 개수는 1000개 미만입니다.
출력
각 시나리오에 대해, 먼저 Scenario #i: 형태의 줄을 출력합니다. 여기서 i는 1부터 시작하는 시나리오 번호입니다. 그 다음 주어진 순서대로 전화번호를 처리합니다. 가능한 각 부호화마다, 전화번호 뒤에 콜론, 하나의 공백, 그리고 부호화를 한 줄에 출력합니다. 줄 끝의 공백은 허용되지 않습니다. 한 전화번호에 대한 서로 다른 부호화들은 사전순(알파벳순)으로 정렬합니다. 이는 문자의 ASCII 값을 기준으로 하므로 대소문자가 구분됩니다. 만약 어떤 전화번호를 전혀 부호화할 수 없다면, 전화번호 뒤에 공백 하나와 cannot be encoded. 문자열을 출력합니다. 각 시나리오는 빈 줄로 끝냅니다.