#include <stdio.h>
#include <string.h>
char tb[105][25], psw[105], ptb[105][25];
int n;
size_t len[105], slen;
bool ok[105];
int word[105];
int nxt[105];
char a2d(char c) {
switch (c) {
case 'a':
case 'b':
case 'c':
return '1';
case 'd':
case 'e':
case 'f':
return '2';
case 'g':
case 'h':
case 'i':
return '3';
case 'j':
case 'k':
case 'l':
return '4';
case 'm':
case 'n':
return '5';
case 'o':
case 'p':
case 'q':
return '6';
case 'r':
case 's':
case 't':
return '7';
case 'u':
case 'v':
case 'w':
return '8';
case 'x':
case 'y':
case 'z':
return '9';
default:
return EOF;
}
}
int main() {
scanf("%d%s", &n, psw + 1);
slen = strlen(psw + 1);
for (int i = 1; i <= n; i++) {
scanf("%s", tb[i] + 1);
len[i] = strlen(tb[i] + 1);
for (int j = 1; j <= len[i]; j++) ptb[i][j] = a2d(tb[i][j]);
}
ok[0] = true;
for (int i = 1; i <= slen; i++) {
for (int j = 1; j <= n; j++) {
if (i >= len[j] && ok[i - len[j]] &&
!strncmp(psw + i - len[j] + 1, ptb[j] + 1, len[j])) {
ok[i] = true;
nxt[i - len[j]] = i;
word[i] = j;
}
}
}
if (!ok[slen])
printf("No Solutions!");
else {
int x = 0;
do {
x = nxt[x];
printf(tb[word[x]] + 1);
if (x != slen) printf(" ");
} while (x != slen);
}
return 0;
}