#include <bits/stdc++.h>
using namespace std;
static const int INF = 500000000;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
char s[1000005];
int m;
int cur[30];
pair<int, int> pos[30];
bitset<1 << 26 + 1> query;
pair<int, int> query2[10005];
int flag[10005], res[10005];
int ans2[10005];
int main() {
  scanf("%s", s);
  int n = strlen(s);
  int m;
  scanf("%d", &m);
  memset(flag, -1, sizeof(flag));
  memset(query2, -1, sizeof(query2));
  int cnt = 0;
  for (int i = 0; i < m; ++i) {
    int bit = 0;
    char tmp[30];
    scanf("%s", tmp);
    int len = strlen(tmp);
    for (int j = 0; j < len; ++j) bit |= (1 << (tmp[j] - 'a'));
    if (query[bit] == 0) {
      query.set(bit);
      query2[cnt++] = make_pair(bit, i);
    } else {
      for (int j = 0; j < cnt; ++j)
        if (query2[j].first == bit) flag[i] = query2[j].second;
    }
  }
  sort(query2, query2 + cnt);
  for (int i = 0; i < 30; ++i) cur[i] = n;
  for (int i = n - 1; i >= 0; --i) {
    cur[s[i] - 'a'] = i;
    for (int j = 0; j < 26; ++j) pos[j] = make_pair(cur[j], j);
    pos[26] = make_pair(n, -1);
    sort(pos, pos + 26);
    int bit = (1 << pos[0].second);
    for (int j = 1; j < 27; ++j) {
      if (query.test(bit)) {
        if (i > 0 && bit >> (s[i - 1] - 'a') & 1) continue;
        ++ans2[lower_bound(query2, query2 + cnt, make_pair(bit, -1))->second];
      }
      if (pos[j].first == n) break;
      bit |= (1 << pos[j].second);
    }
  }
  for (int i = 0; i < m; ++i) {
    if (flag[i] != -1) {
      printf("%d\n", ans2[flag[i]]);
      continue;
    }
    int& ans = ans2[i];
    printf("%d\n", ans);
  }
  return 0;
}
