#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
bool chmin(T1 &a, T2 b) {
  return b < a && (a = b, true);
}
template <class T1, class T2>
bool chmax(T1 &a, T2 b) {
  return a < b && (a = b, true);
}
int main() {
  int n;
  cin >> n;
  string s;
  cin >> s;
  const long long mod1 = 1e9 + 7;
  const long long mod2 = 1e9 + 9;
  long long base1 = rand() % 10000 * 10000 + rand() % 10000 + 2;
  long long base2 = rand() % 10000 * 10000 + rand() % 10000 + 2;
  set<tuple<int, long long, long long>> st;
  int m;
  cin >> m;
  map<tuple<int, long long, long long>, string> mp;
  for (int i = 0; i < (m); i++) {
    string t;
    cin >> t;
    long long h1 = 0;
    long long h2 = 0;
    for (int j = (t.size()) - 1; j >= 0; j--)
      h1 = (h1 * base1 + tolower(t[j])) % mod1;
    for (int j = (t.size()) - 1; j >= 0; j--)
      h2 = (h2 * base2 + tolower(t[j])) % mod2;
    st.emplace((int)t.size(), h1, h2);
    mp[make_tuple((int)t.size(), h1, h2)] = t;
  }
  static bool dp[10101];
  static int prev[10101];
  dp[0] = true;
  for (int i = 0; i < (n); i++)
    if (dp[i]) {
      long long h1 = 0;
      long long h2 = 0;
      for (int j = i; j < n && j - i + 1 <= 1001; j++) {
        h1 = (h1 * base1 + s[j]) % mod1;
        h2 = (h2 * base2 + s[j]) % mod2;
        if (!dp[j + 1] && st.count(make_tuple(j - i + 1, h1, h2))) {
          dp[j + 1] = true;
          prev[j + 1] = i;
        }
      }
    }
  vector<string> ans;
  int i = n;
  while (i > 0) {
    int j = i;
    i = prev[i];
    string ss = s.substr(i, j - i);
    long long h1 = 0;
    long long h2 = 0;
    for (int j = 0; j < (ss.size()); j++) h1 = (h1 * base1 + ss[j]) % mod1;
    for (int j = 0; j < (ss.size()); j++) h2 = (h2 * base2 + ss[j]) % mod2;
    ans.push_back(mp[make_tuple(j - i, h1, h2)]);
  }
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < (ans.size()); i++) {
    if (i != 0) cout << " ";
    cout << ans[i];
  }
  cout << endl;
  return 0;
}
