#include <bits/stdc++.h>
using namespace std;
template <typename T>
int size(T& a) {
  return (int)a.size();
}
template <typename T>
T sqr(T a) {
  return a * a;
}
int offset;
int f[1000000 * 4 + 10];
int start[27];
int getmask(int l, int r) {
  int res = 0;
  for (l += offset, r += offset; l <= r; l /= 2, r /= 2) {
    if (l % 2 == 1) {
      res |= f[l++];
    }
    if (r % 2 == 0) {
      res |= f[r--];
    }
  }
  return res;
}
vector<int> pos[27];
int ans[10000];
map<int, int> num;
int cnt[27][10000];
int g[10000];
int main() {
  string s;
  cin >> s;
  s += (char)('z' + 1);
  offset = 1;
  while (offset < size(s)) offset *= 2;
  memset((f), (0), sizeof(f));
  for (int i = offset; i < offset + size(s); ++i) {
    f[i] = 1 << (s[i - offset] - 'a');
  }
  for (int i = offset - 1; i >= 1; --i) {
    f[i] = f[2 * i] | f[2 * i + 1];
  }
  for (int i = 0; i < size(s); ++i) {
    pos[s[i] - 'a'].push_back(i);
  }
  int q;
  cin >> q;
  for (int i = 0; i < q; ++i) {
    string e;
    cin >> e;
    int mask = 0;
    for (int j = 0; j < e.length(); ++j) {
      mask |= 1 << (e[j] - 'a');
    }
    g[i] = mask;
    num[mask] = i;
  }
  for (int i = 0; i < size(s) - 1; ++i) {
    for (int b = 0; b < 27; ++b) {
      if (s[i] - 'a' == b) continue;
      while (start[b] < pos[b].size() && pos[b][start[b]] < i) {
        ++start[b];
      }
      if (start[b] < pos[b].size() && pos[b][start[b]] >= i) {
        int m = getmask(i, pos[b][start[b]] - 1);
        if (i > 0 && (m & (1 << (s[i - 1] - 'a'))) != 0) continue;
        if (!num.count(m)) continue;
        cnt[b][num[m]]++;
      }
    }
  }
  for (int i = 0; i < q; ++i) {
    int res = 0;
    for (int b = 0; b < 27; ++b)
      if ((g[i] & (1 << b)) == 0) {
        res += cnt[b][num[g[i]]];
      }
    cout << res << endl;
  }
}
