휴대폰 제조사 ICPC(International Cellular Phones Corporation)는 회사의 앞날을 걸고 새 휴대폰을 개발하고 있다. 이 휴대폰에는 웹 브라우저, 메일 프로그램, 메신저를 비롯한 여러 통신 기능이 들어간다. ICPC 구성원이 이 힘든 일을 끝내지 못하면 회사는 결국 시장을 잃는다.
당신이 맡은 일은 작은 단말기에서 쓸 문자 입력 소프트웨어를 만드는 것이다. 요즘 휴대폰에는 버튼이 열두 개 있다. "0"부터 "9"까지 숫자 버튼 열 개와 특수 버튼 "*", "#" 두 개다. 회사의 목표는 크지만 오늘날의 표준과 관행은 그대로 따르기로 했다. 표준 버튼 배치를 바꿔서는 안 되고, 아래 표의 표준 문자 배정도 지켜야 한다.
| 버튼 | 문자 | 버튼 | 문자 |
|---|---|---|---|
| 2 | a, b, c | 6 | m, n, o |
| 3 | d, e, f | 7 | p, q, r, s |
| 4 | g, h, i | 8 | t, u, v |
| 5 | j, k, l | 9 | w, x, y, z |
즉 문자를 입력할 때 쓸 수 있는 버튼은 여덟 개뿐이다.
ICPC 휴대폰 사용자는 버튼을 한 번 더 누르는 시간조차 아까워할 만큼 바쁘다. 그래서 이 소프트웨어는 문자 하나를 입력할 때 버튼을 한 번만 누르면 되도록 만들어야 한다. 예를 들어 버튼을 "77377" 순서로 누르면 "press"가 나와야 하고, "77377843288866"은 "press the button"이 되어야 한다.
숫자 하나가 영문자 여러 개를 나타내니 이런 소프트웨어는 만들 수 없어 보인다. "77377" 하나만 해도 "press" 말고 768=4×4×3×4×4개의 문자열을 나타낸다. 다행히 새 모델에는 사전을 통째로 담을 만큼 메모리가 넉넉하다. 사전에 없는 문자열을 걸러내는 프로그램을 만들면 된다.
입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 사전 하나와 버튼을 누른 순서 하나를 다음 형식으로 담는다.
n
word1
...
wordn
sequence
첫 줄의 n은 사전에 실린 단어의 개수를 나타내는 양의 정수다. 이어지는 n개 줄에는 단어가 한 줄에 하나씩 주어지고, 각 단어는 소문자 'a'부터 'z'까지만 쓴다. 사전에 단어가 실린 순서는 임의이고, 사전순이라는 보장은 없다. 같은 단어가 두 번 나오지는 않는다. 마지막 줄 sequence는 버튼을 누른 순서이고 '2'부터 '9'까지의 숫자만 쓴다.
사전에는 단어가 최대 100개 실리고, 각 단어의 길이는 1 이상 50 이하다. sequence의 숫자 개수는 1 이상 300 이하다.
0 하나만 있는 줄이 나오면 입력이 끝난다.
각 데이터 집합마다 주어진 버튼 순서로 만들 수 있는 문장을 모두 출력한다. 문장은 사전에 실린 단어를 이어 붙인 것이고, 한 줄에 하나씩 출력한다.
한 줄에서 이웃한 두 단어는 공백 하나로 구분하고, 마지막 단어 뒤에는 마침표('.') 하나를 붙인다.
출력 순서는 이렇게 정한다. 단어 개수가 적은 문장을 먼저 출력하고, 단어 개수가 같으면 마침표까지 포함한 줄 전체를 아스키 코드 순으로 비교해 앞서는 문장을 먼저 출력한다.
문장을 모두 출력한 뒤에는 하이픈 두 개("--")만 있는 줄을 출력한다. 만들 수 있는 문장이 하나도 없으면 이 줄만 출력한다.
각 데이터 집합에서 출력하는 문장은 끝을 알리는 줄을 빼고 최대 20개다.