#include <bits/stdc++.h>
using namespace std;
void init_ios() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
}
const long long MOD = (long long)1e9 + 7;
const long long X = 347;
const long long N = (long long)1e6 + 10;
long long n, m, pot[N], h[N];
string a;
pair<string, string> wy[N];
long long ha[N], tmp;
bool dziala[N];
long long ktore[N];
map<long long, vector<long long> > jest;
string odwr(string a) {
  string res = "";
  for (long long i = 0; i < a.size(); ++i) res += a[a.size() - 1 - i];
  return res;
}
string jeb(string a) {
  string res = odwr(a);
  for (long long i = 0; i < a.size(); ++i)
    if (res[i] < 'a') res[i] = (char)(res[i] + ('a' - 'A'));
  return res;
}
long long hasz(string co) {
  long long res = 0;
  tmp = 0;
  if (co.size() >= 11)
    for (long long j = 10; j >= 0; --j) tmp = (X * tmp + co[j]) % MOD;
  for (long long i = co.size() - 1; i >= 0; --i) res = (res * X + co[i]) % MOD;
  return res;
}
vector<long long> wyrazy[N];
map<long long, long long> mapa;
long long t = 1;
long long get(long long a, long long b) {
  return ((h[a] - (h[b + 1] * pot[b - a + 1]) % MOD) % MOD + MOD) % MOD;
}
signed main() {
  init_ios();
  cin >> n >> a >> m;
  pot[0] = 1;
  for (long long i = 1; i <= N - 5; ++i) pot[i] = (pot[i - 1] * X) % MOD;
  for (long long i = n - 1; i >= 0; --i) h[i] = (X * h[i + 1] + a[i]) % MOD;
  for (long long i = 1; i <= m; ++i) {
    string q;
    cin >> q;
    wy[i] = make_pair(q, jeb(q));
    ha[i] = hasz(wy[i].second);
    jest[ha[i]].push_back(i);
    if (q.size() >= 11) {
      if (mapa[tmp] == 0) {
        mapa[tmp] = t++;
        wyrazy[t - 1].push_back(i);
      } else
        wyrazy[mapa[tmp]].push_back(i);
    }
  }
  dziala[n] = true;
  for (long long i = n - 1; i >= 0; --i) {
    for (long long j = 0; i + j <= min(n - 1, i + 10); ++j) {
      long long hsz = get(i, i + j);
      if (jest[hsz].size() != 0)
        for (auto it : jest[hsz])
          if (dziala[i + wy[it].first.size()]) {
            dziala[i] = true;
            ktore[i] = it;
            break;
          }
    }
    if (dziala[i]) continue;
    if (i + 10 >= n) continue;
    long long hsz = mapa[get(i, i + 10)];
    for (auto it : wyrazy[hsz])
      if (i + wy[it].first.size() <= n && dziala[i + wy[it].first.size()] &&
          get(i, i + wy[it].first.size() - 1) == ha[it]) {
        dziala[i] = true;
        ktore[i] = it;
        break;
      }
  }
  long long j = 0;
  while (j != n) {
    cout << wy[ktore[j]].first << " ";
    j += wy[ktore[j]].first.size();
  }
  cout << "\n";
}
