#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 10;
int nexts[MAXN][30], word[MAXN], End[MAXN];
int root, L;
int newnode() {
  for (int i = 0; i <= 25; i++) nexts[L][i] = -1;
  word[L] = 0;
  End[L] = -1;
  L++;
  return L - 1;
}
void init() {
  L = 0;
  root = newnode();
}
void Insert(char *s, int id) {
  int u = root, v;
  for (int i = 0; s[i]; i++) {
    v = s[i] - 'a';
    if (s[i] >= 'A' && s[i] <= 'Z') v = s[i] - 'A';
    if (nexts[u][v] == -1) nexts[u][v] = newnode();
    u = nexts[u][v];
    word[u]++;
  }
  End[u] = id;
}
const int MAXM = 1e4 + 10;
char str[MAXM];
int n;
const int N = 1e5 + 10;
char ss[N][1010];
int cnt;
int mark[MAXM];
bool DFS(int pos) {
  if (pos == -1) return true;
  if (mark[pos] != -1) return mark[pos];
  int u = root, v;
  for (int i = pos; i >= 0; i--) {
    int v = str[i] - 'a';
    if (nexts[u][v] == -1) break;
    u = nexts[u][v];
    int id = End[u];
    if (id != -1 && DFS(i - 1)) {
      if (cnt) cout << " ";
      cout << ss[id];
      cnt++;
      return mark[pos] = true;
    }
  }
  return mark[pos] = false;
}
int main() {
  cin >> n;
  cin >> str;
  int m;
  cin >> m;
  init();
  for (int i = 0; i < m; i++) {
    cin >> ss[i];
    Insert(ss[i], i);
  }
  memset(mark, (-1), sizeof(mark));
  cnt = 0;
  DFS(n - 1);
  return 0;
}
