#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
const double PI = acos(-1.0);
int GCD(int x, int y) {
  if (x % y == 0)
    return y;
  else
    return (GCD(y, x % y));
}
const int mod1 = 1e9 + 7;
const int mod2 = 1e9 + 9;
const int mx = 1e5 + 5;
int dp[mx], n, m;
char qur[mx][1005];
char s[mx];
map<unsigned long long int, int> rep;
map<unsigned long long int, bool> has;
vector<int> vi;
void doHash(int id) {
  int i, j, len = strlen(qur[id]);
  unsigned long long int x, hash1 = 0;
  for (i = len - 1; i >= 0; i--) {
    x = tolower(qur[id][i]) - 'a' + 1;
    hash1 = (hash1 * 41) + x;
  }
  has[hash1] = 1;
  rep[hash1] = id;
}
int solve(int id) {
  if (id == n) return 1;
  if (dp[id] != -1) return dp[id];
  int ret = 0, i, j;
  unsigned long long int x, hash1 = 0;
  for (i = id; i < n; i++) {
    x = tolower(s[i]) - 'a' + 1;
    hash1 = (hash1 * 41) + x;
    if (has[hash1]) {
      if (solve(i + 1)) {
        ret = i;
        break;
      }
    }
  }
  return dp[id] = ret;
}
unsigned long long int retHash(int l, int r) {
  int i, j;
  unsigned long long int x, hash1 = 0;
  for (i = l; i <= r; i++) {
    x = tolower(s[i]) - 'a' + 1;
    hash1 = (hash1 * 41) + x;
  }
  return hash1;
}
int main() {
  int i, j;
  unsigned long long int x;
  scanf("%d", &n);
  scanf("%s", s);
  scanf("%d", &m);
  has.clear();
  rep.clear();
  for (i = 0; i < m; i++) {
    scanf("%s", qur[i]);
    doHash(i);
  }
  memset(dp, -1, sizeof dp);
  solve(0);
  int lm = dp[0], id = 0;
  int prlm = -1, prid = -1;
  unsigned long long int hash1;
  while (lm != -1) {
    hash1 = retHash(id, lm);
    id = lm + 1;
    lm = dp[id];
    vi.push_back(rep[hash1]);
  }
  for (i = 0; i < vi.size(); i++) {
    printf("%s ", qur[vi[i]]);
  }
  return 0;
}
