#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e6 + 10;
const int M = 10005;
char ch[N];
int m, ha[M], flag[M], Q[M];
int find(int v) {
  int l = 0, r = m - 1;
  while (l < r) {
    int mid = l + r >> 1;
    if (ha[mid] >= v)
      r = mid;
    else
      l = mid + 1;
  }
  return ha[r] == v ? r : -1;
}
int main() {
  while (~scanf("%s", ch)) {
    int n = strlen(ch);
    int msk;
    cin >> m;
    char c[50];
    for (int i = 0; i < m; i++) {
      scanf("%s", c);
      msk = 0;
      int k = strlen(c);
      for (int j = 0; j < k; j++) msk |= 1 << c[j] - 'a';
      ha[i] = Q[i] = msk;
    }
    sort(ha, ha + m);
    int nxt[27];
    memset(nxt, -1, sizeof(nxt));
    memset(flag, 0, sizeof(flag));
    for (int i = n - 1; i >= 0; i--) {
      int x = 1 << ch[i] - 'a';
      int y = i == 0 ? -1 : 1 << ch[i - 1] - 'a';
      for (int j = 0; j < 27; j++)
        if (nxt[j] == -1 || nxt[j] == x) {
          for (int k = j; k; k--) nxt[k] = nxt[k - 1];
          nxt[0] = x;
          break;
        }
      int msk = 0, p;
      for (int j = 0; nxt[j] != -1 && nxt[j] != y; j++) {
        msk |= nxt[j];
        if ((p = find(msk)) != -1) flag[p]++;
      }
    }
    for (int i = 0; i < m; i++) printf("%d\n", flag[find(Q[i])]);
  }
}
