#include <bits/stdc++.h>
using namespace std;
int n;
char arr[1010];
int trie[1000010][26];
int nodecnt;
int isend[1000010];
int dp[10010];
string s;
vector<string> ans;
string words[100010];
void init() {
  memset(trie, -1, sizeof(trie));
  memset(isend, -1, sizeof(isend));
  memset(dp, -1, sizeof(dp));
}
void insert(const char *s, int mkan) {
  int cur = 0;
  for (int i = 0; s[i]; ++i) {
    int nxt = trie[cur][s[i] - '0'];
    if (nxt == -1) {
      nxt = trie[cur][s[i] - '0'] = ++nodecnt;
    }
    cur = nxt;
  }
  isend[cur] = mkan;
}
bool solve(int idx) {
  if (idx == n) return 1;
  int &ret = dp[idx];
  if (ret != -1) return ret;
  ret = 0;
  int cur = 0;
  for (int i = idx; i < n; ++i) {
    int nxt = trie[cur][s[i] - '0'];
    if (nxt == -1) break;
    if (isend[nxt] != -1) ret |= solve(i + 1);
    cur = nxt;
  }
  return ret;
}
void printans(int idx) {
  if (idx == n) return;
  int cur = 0;
  for (int i = idx; i < n; ++i) {
    int nxt = trie[cur][s[i] - '0'];
    if (nxt == -1) break;
    if (isend[nxt] != -1) {
      if (solve(i + 1)) {
        ans.push_back(words[isend[nxt]]);
        printans(i + 1);
        return;
      }
    }
    cur = nxt;
  }
}
int main() {
  init();
  scanf("%d", &n);
  cin >> s;
  int m;
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    scanf("%s", arr);
    words[i] = arr;
    int sizee = (unsigned)strlen(arr);
    for (int j = 0; j < sizee; ++j) arr[j] = tolower(arr[j]);
    reverse(arr, arr + sizee);
    insert(arr, i);
  }
  solve(0);
  printans(0);
  for (int i = 0; i < ans.size(); ++i) {
    printf("%s ", ans[i].c_str());
  }
  printf("\n");
  return 0;
}
