도리는 단기 기억 상실을 겪고 있습니다. 전화번호는 그녀에게 가장 큰 수수께끼 중 하나입니다. 친구 말린에게 전화를 걸려고 할 때마다 그의 번호를 좀처럼 떠올리지 못하죠. 하지만 단어는 비교적 쉽게 기억하므로(그녀는 외국어까지 구사합니다), 전화번호를 단어로 바꾸어 그녀를 도와줍시다.
전화번호를 더 쉽게 외울 수 있도록, 숫자를 단어로 부호화하는 대응 규칙을 사용합니다. 글자에서 숫자로의 대응은 다음과 같습니다.
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. 문자열을 출력합니다. 각 시나리오는 빈 줄로 끝냅니다.