#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000 + 10, MAXM = 10000 + 10, MAXL = 1000, MOD = 69000037,
          CNTALP = 26;
char str[MAXN], str1[CNTALP];
short cnt[MOD];
int cnt1[MAXM], tot;
int n, m, s[MAXM], fr[MAXL + 10][MAXL + 10], bh[MAXL + 10][MAXL + 10], CC[MAXM];
void init() {
  scanf("%s", str);
  n = strlen(str);
  scanf("%d", &m);
  for (int i = 1; i <= m; ++i) {
    scanf("%s", str1);
    int len = strlen(str1);
    for (int j = 0; j < len; ++j) s[i] |= 1 << (str1[j] - 'a');
  }
}
inline void check(int i, int j, int S) {
  if ((i == 0 || !((1 << (str[i - 1] - 'a')) & S)) &&
      (i == n - 1 || !((1 << (str[j + 1] - 'a')) & S))) {
    if (cnt[S] == 32767) {
      cnt[S] = -(++tot);
      cnt1[tot] = 32767;
    }
    if (cnt[S] < 0)
      ++cnt1[-cnt[S]];
    else
      ++cnt[S];
  }
}
inline void solve1() {
  for (int b = 0; b <= (n - 1) / MAXL; ++b) {
    for (int i = b * MAXL; i < min((b + 1) * MAXL, n); ++i) {
      int S = 1 << (str[i] - 'a');
      check(i, i, S);
      for (int j = i + 1; j < min((b + 1) * MAXL, n); ++j)
        S |= (1 << (str[j] - 'a')), check(i, j, S);
    }
    for (int i = b * MAXL, j = 1; i < min(n, (b + 1) * MAXL); ++i, ++j)
      fr[b][j] = fr[b][j - 1] | (1 << (str[i] - 'a'));
    for (int i = min(n, (b + 1) * MAXL) - 1, j = 1; i >= b * MAXL; --i, ++j)
      bh[b][j] = bh[b][j - 1] | (1 << (str[i] - 'a'));
  }
  for (int i = 1; i <= m; ++i)
    if (cnt[s[i]] >= 0)
      CC[i] += cnt[s[i]];
    else
      CC[i] += cnt1[-cnt[s[i]]];
}
inline bool check(int b, int i, int j, bool flag) {
  if (flag) return (fr[b][j] & s[i]) == fr[b][j];
  return (bh[b][j] & s[i]) == bh[b][j];
}
inline int Find(int b, int i, bool flag) {
  int l = 0, r = (b == (n - 1) / MAXL) ? n - b * MAXL : MAXL;
  if (!check(b, i, 1, flag)) return 0;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (check(b, i, mid, flag))
      l = mid + 1;
    else
      r = mid - 1;
  }
  return r;
}
inline void solve2() {
  for (int i = 1; i <= m; ++i) {
    int S = 0, cnt = 0;
    for (int b = 0; b <= (n - 1) / MAXL; ++b) {
      int p1 = Find(b, i, 1);
      S |= fr[b][p1];
      if (p1 > 0) ++cnt;
      if (b * MAXL + p1 - 1 < min(n, (b + 1) * MAXL) - 1) {
        if (S == s[i] && cnt > 1) ++CC[i];
        int p2 = Find(b, i, 0);
        S = bh[b][min(p2, min(n, (b + 1) * MAXL) - 1 - b * MAXL + p1 - 1)];
        cnt = (min(p2, min(n, (b + 1) * MAXL) - 1 - b * MAXL + p1 - 1) != 0);
      }
    }
    if (S == s[i] && cnt > 1) ++CC[i];
    printf("%d\n", CC[i]);
  }
}
int main() {
  init();
  solve1();
  solve2();
  fclose(stdin);
  fclose(stdout);
  return 0;
}
