#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int m;
string v[100010];
unordered_map<int, int> dic;
int p = 257;
int mod = 1000000007;
int dp[10010];
int mem[10010];
int solve(int i) {
  if (i == n) return n;
  if (dp[i] != -1) return dp[i];
  int res = 0;
  long long h = 0;
  for (int j = i; j < n; j++) {
    h = (h * p + s[j]) % mod;
    if (dic.find(h) != dic.end()) {
      int tmp = solve(j + 1);
      if (tmp > 0) {
        res = j + 1;
        mem[i] = h;
        break;
      }
    }
  }
  dp[i] = res;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  cin >> s;
  cin >> m;
  for (int i = 0; i < m; i++) cin >> v[i];
  for (int i = 0; i < m; i++) {
    long long h = 0;
    string tmp = v[i];
    for (int j = 0; j < tmp.length(); j++)
      if (tmp[j] >= 'A' && tmp[j] <= 'Z') tmp[j] = tmp[j] - 'A' + 'a';
    for (int j = 0; j < tmp.length(); j++)
      h = (h * p + tmp[tmp.length() - j - 1]) % mod;
    dic[h] = i;
  }
  for (int i = 0; i < n; i++) dp[i] = -1;
  solve(0);
  if (dp[0] == 0) return -1;
  int k = 0;
  string str;
  while (k != n) {
    str += v[dic[mem[k]]];
    str += " ";
    k = dp[k];
  }
  str.pop_back();
  cout << str << endl;
  return 0;
}
