#include <bits/stdc++.h>
using namespace std;
short xxx[1 << 26];
char s[1111111];
int m, n;
char w[33];
int res[11111];
int mask[11111];
struct Res {
  vector<pair<int, int> > beg;
  vector<pair<int, int> > end;
  int all;
  int from;
  int to;
};
Res solve(int l, int r) {
  Res rr;
  rr.from = l;
  rr.to = r;
  if (r == l) {
    rr.all = 1 << (s[l] - 'a');
  } else {
    int end = (l + r) / 2;
    Res t1 = solve(l, end);
    Res t2 = solve(end + 1, r);
    rr.all = t1.all | t2.all;
    rr.beg = t1.beg;
    rr.beg.push_back(pair<int, int>(t1.all, end));
    for (int i = (0); i < (t2.beg.size()); i++) {
      int nmask = t2.beg[i].first | t1.all;
      if (nmask != rr.all) {
        if (rr.beg.back().first != nmask)
          rr.beg.push_back(pair<int, int>(nmask, t2.beg[i].second));
        else
          rr.beg.back().second = t2.beg[i].second;
      }
    }
    while (rr.beg.size() && rr.beg.back().first == rr.all) rr.beg.pop_back();
    rr.end = t2.end;
    rr.end.push_back(pair<int, int>(t2.all, end + 1));
    for (int i = (0); i < (t1.end.size()); i++) {
      int nmask = t1.end[i].first | t2.all;
      if (nmask != rr.all) {
        if (rr.end.back().first != nmask)
          rr.end.push_back(pair<int, int>(nmask, t1.end[i].second));
        else
          rr.end.back().second = t1.end[i].second;
      }
    }
    while (rr.end.size() && rr.end.back().first == rr.all) rr.end.pop_back();
    vector<int> v;
    for (int i = (0); i < (t1.end.size() + 1); i++)
      for (int j = (0); j < (t2.beg.size() + 1); j++) {
        int nmask = (i == t1.end.size() ? 0 : t1.end[i].first) |
                    (t2.beg.size() == j ? 0 : t2.beg[j].first);
        if (nmask != rr.all && (nmask & t1.all) != t1.all &&
            (nmask & t2.all) != t2.all) {
          v.push_back(nmask);
        }
      }
    sort((v).begin(), (v).end()),
        (v).erase(unique((v).begin(), (v).end()), (v).end());
    for (int i = (0); i < (v.size()); i++) res[xxx[v[i]]]++;
  }
  int mask = 1 << (s[l] - 'a');
  for (int i = (0); i < (rr.beg.size()); i++) {
    if (rr.beg[i].first != mask)
      while (1)
        ;
    mask |= (1 << (s[rr.beg[i].second + 1] - 'a'));
  }
  while (mask != rr.all)
    ;
  mask = 1 << (s[r] - 'a');
  for (int i = (0); i < (rr.end.size()); i++) {
    mask |= (1 << (s[rr.end[i].second - 1] - 'a'));
  }
  while (mask != rr.all)
    ;
  return rr;
}
int main() {
  scanf(" %s", s);
  n = strlen(s);
  cin >> m;
  for (int i = (0); i < (m); i++) {
    scanf(" %s", w);
    int tt = strlen(w);
    int mm = 0;
    for (int j = (0); j < (tt); j++) mm |= (1 << (w[j] - 'a'));
    mask[i] = mm;
    xxx[mm] = i + 1;
  }
  Res t = solve(0, n - 1);
  res[xxx[t.all]]++;
  for (int i = (0); i < (t.beg.size()); i++) res[xxx[t.beg[i].first]]++;
  for (int i = (0); i < (t.end.size()); i++) res[xxx[t.end[i].first]]++;
  for (int i = (0); i < (m); i++) printf("%d\n", res[xxx[mask[i]]]);
  return 0;
}
