#include <bits/stdc++.h>
using namespace std;
inline long long gcd(long long x, long long y) { return x ? gcd(y % x, x) : y; }
const long long mod = 1e9 + 7;
inline long long QPow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ans;
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  long long d = a;
  if (b == 0)
    x = 1, y = 0;
  else {
    d = exgcd(b, a % b, y, x), y -= a / b * x;
  }
  return d;
}
const long long maxn = 1000005;
signed tree[maxn][27];
signed flag[maxn];
string strs_old[maxn];
signed tot = 0;
void insert(const string &str, signed num) {
  signed len = str.size();
  signed root = 0;
  for (signed i = 0; i < len; i++) {
    signed id = str[i] - 'a';
    if (!tree[root][id]) tree[root][id] = ++tot;
    root = tree[root][id];
  }
  flag[root] = num;
}
void init() {
  for (signed i = 0; i <= tot; i++) {
    flag[i] = 0;
    for (signed j = 0; j < 27; j++) tree[i][j] = 0;
  }
  tot = 0;
}
string strs[100002];
char toLower(char c) { return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c); }
signed dp[maxn];
signed main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long t;
  signed n, l, m;
  cin >> n;
  string txt;
  cin >> txt;
  for (signed i = 0; i < txt.size(); i++) txt[i] = toLower(txt[i]);
  txt = " " + txt;
  cin >> m;
  for (long long i = 1; i <= m; i++) {
    cin >> strs[i];
    strs_old[i] = strs[i];
    for (long long j = 0; j < strs[i].size(); j++)
      strs[i][j] = toLower(strs[i][j]);
    insert(strs[i], i);
  }
  dp[0] = 1;
  for (long long i = 1; i <= n; i++) {
    signed root = 0;
    long long j;
    for (j = i; j >= 1 && j > i - 1000; j--) {
      signed id = txt[j] - 'a';
      if (tree[root][id] == 0) break;
      root = tree[root][id];
      if (dp[j - 1] && flag[root]) dp[i] = flag[root];
    }
  }
  vector<string> ans;
  long long ptr = n;
  while (ptr) {
    ans.push_back(strs_old[dp[ptr]]);
    ptr -= strs[dp[ptr]].size();
  }
  for (long long i = ans.size() - 1; i >= 0; i--) cout << ans[i] << ' ';
  cout << endl;
  return 0;
}
