#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const int mod = 998244353;
template <class T>
void read(T &x) {
  char c;
  bool op = 0;
  while (c = getchar(), c < '0' || c > '9')
    if (c == '-') op = 1;
  x = c - '0';
  while (c = getchar(), c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    if (x > mod) x %= mod;
  }
  if (op) x = -x;
}
template <class T>
void write(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar('0' + x % 10);
}
const int maxn = 1e4 + 5;
const int maxm = 1e5 + 5;
char ss[maxm][1005];
char s[maxn];
struct trie {
  int ch[27], val;
  trie() {
    memset(ch, 0, sizeof(ch));
    val = 0;
  }
} t[maxm * 10];
int n, m, cnt = 0;
int pre[maxm * 10], ans[maxm];
int getnum(char c) { return c >= 'a' ? c - 'a' : c - 'A'; }
void insert(int id, char *s) {
  int len = strlen(s);
  int now = 0;
  for (int i = 0; i <= len - 1; i++) {
    int c = getnum(s[i]);
    if (!t[now].ch[c]) t[now].ch[c] = ++cnt;
    now = t[now].ch[c];
    if (i == len - 1) t[now].val = id;
  }
}
void query(int x) {
  int now = 0;
  for (int i = x; i >= 0; i--) {
    int c = getnum(s[i]);
    if (!t[now].ch[c]) return;
    now = t[now].ch[c];
    if (t[now].val && (ans[i - 1] || i == 0)) {
      pre[x] = i - 1;
      ans[x] = t[now].val;
      return;
    }
  }
}
void print(int x) {
  if (pre[x] != -1) print(pre[x]);
  printf("%s ", ss[ans[x]]);
}
int main() {
  read(n);
  scanf("%s", s);
  read(m);
  for (int i = 1; i <= m; i++) {
    scanf("%s", ss[i]);
    insert(i, ss[i]);
  }
  for (int i = 0; i <= n - 1; i++) {
    query(i);
  }
  print(n - 1);
  puts("");
  return 0;
}
