#include <bits/stdc++.h>
using namespace std;
const int N = 1010, P = 5, MOD = 1e9 + 7;
int add(int a, int b) {
  if ((a += b) >= P) a -= P;
  return a < 0 ? a + P : a;
}
int mul(int a, int b) { return 1ll * a * b % P; }
int kpow(int a, int b) {
  int r = 1;
  for (; b; b >>= 1, a = mul(a, a)) {
    if (b & 1) r = mul(r, a);
  }
  return r;
}
int n, m, q;
int a[N][N];
bool ans[N];
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> m;
  for (int i = (0); i < (n); i++) {
    string s;
    cin >> s;
    for (int j = (0); j < (m); j++) a[j][i] = s[j] - 'a';
  }
  cin >> q;
  for (int i = (n); i < (n + q); i++) {
    string s;
    cin >> s;
    for (int j = (0); j < (m); j++) a[j][i] = s[j] - 'a';
  }
  int k, col, p;
  int equ = m, var = n;
  for (k = col = 0; k < equ && col < var; ++k, ++col) {
    p = k;
    for (int i = (k); i < (equ); i++)
      if (a[i][col]) {
        p = i;
        break;
      }
    if (p != k)
      for (int j = (col); j < (var + q); j++) swap(a[p][j], a[k][j]);
    if (!a[k][col]) {
      k--;
      continue;
    }
    int inv = kpow(a[k][col], P - 2);
    for (int i = (col); i < (var + q); i++) a[k][i] = mul(a[k][i], inv);
    for (int i = (k + 1); i < (equ); i++)
      if (a[i][col]) {
        int t = a[i][col];
        for (int j = (col); j < (var + q); j++)
          a[i][j] = add(a[i][j], -mul(a[k][j], t));
      }
  }
  int tt = n - k;
  int res = 1;
  for (int i = (0); i < (tt); i++) res = res * 5ll % MOD;
  for (int i = (0); i < (q); i++) {
    bool ok = 1;
    for (int j = (k); j < (equ); j++)
      if (a[j][var + i]) ok = 0;
    if (ok) {
      cout << res << "\n";
    } else {
      cout << 0 << "\n";
    }
  }
  return 0;
}
