#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string get() {
  char ch[10000];
  scanf("%s", ch);
  return ch;
}
const int MAX_N = 1e5 + 10;
const int MAX_LEN = 1e4 + 10;
const int MAX_LG = 21;
const int MAX_CNT = 1e6 + 10;
long long n, m;
string s;
string t[MAX_N];
long long g[MAX_CNT][26];
long long sz;
long long root[MAX_CNT];
bool done[MAX_CNT];
bool can[MAX_N];
long long p[MAX_LEN];
string t2[MAX_N];
inline void ins(long long i) {
  long long node = 0;
  for (long long pt = 0; pt < t[i].size(); pt++) {
    long long ch = t[i][pt] - 'a';
    if (g[node][ch] == 0) g[node][ch] = ++sz;
    node = g[node][ch];
  }
  done[node] = 1, root[node] = i;
}
inline void printer(long long n) {
  if (!n) return;
  printer(n - (long long)t[p[n]].size());
  cout << t2[p[n]] << " ";
}
int32_t main() {
  n = in(), s = get(), m = in();
  for (long long i = 0; i < s.size(); i++) s[i] = char(tolower(s[i]));
  for (long long i = 0; i < m; i++) {
    t[i] = get();
    t2[i] = t[i];
    for (long long j = 0; j < t[i].size(); j++)
      t[i][j] = char(tolower(t[i][j]));
    ins(i);
  }
  s = "#" + s;
  can[0] = true;
  for (long long i = 1; i <= n; i++) {
    long long cur = 0, j = i;
    while (j >= 1) {
      long long ch = s[j] - 'a';
      cur = g[cur][ch];
      if (!cur || (can[j - 1] && done[cur])) break;
      j--;
    }
    if (j >= 1 && cur && done[cur] && can[j - 1])
      can[i] = true, p[i] = root[cur];
  }
  printer(n);
}
