#include #include #include using namespace std; string f(const string & str) { string ans = ""; for(int i = 0; i < str.size(); i++) { char ch = str[i]; if('a' <= ch && ch <= 'c') { ans = ans + '2'; } else if('d' <= ch && ch <= 'f') { ans = ans + '3'; } else if('g' <= ch && ch <= 'i') { ans = ans + '4'; } else if('j' <= ch && ch <= 'l') { ans = ans + '5'; } else if('m' <= ch && ch <= 'o') { ans = ans + '6'; } else if('p' <= ch && ch <= 's') { ans = ans + '7'; } else if('t' <= ch && ch <= 'v') { ans = ans + '8'; } else if('w' <= ch && ch <= 'z') { ans = ans + '9'; } } return ans; } string word; vector vec, ans, fa; void saiki(int index, int t, string rireki) { if(index == word.size()) { string str; for(int i = 0; i < rireki.size(); i++) { if(i) { str += " "; } str += ans[rireki[i]-'0']; } str += "."; fa.push_back(str); return; } else if(index > word.size()) { return; } for(int i = 0; i < vec.size(); i++) { bool flag = true; int j; for(j = 0; j < vec[i].size(); j++) { if(j + index >= word.size() || vec[i][j] != word[j + index]) { flag = false; break; } } if(flag) { saiki(index + j, t, rireki + (char)(i+'0')); } } } int main() { int N; while(cin >> N && N) { vec.clear(); ans.clear(); fa.clear(); for(int i = 0; i < N; i++) { string str; cin >> str; ans.push_back(str); vec.push_back(f(str)); } cin >> word; saiki(0, 0, ""); sort(fa.begin(), fa.end()); for(int i = 0; i < fa.size(); i++) { cout << fa[i] << endl; } cout << "--" << endl; } }