#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using LL = long long;
string s, t[10000];
unordered_map<int, int> mp;
int m, ans[10000], len[10000], pos2[26];
vector<int> pos[26];
int curpos[26];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> s >> m;
  for (int i = 0; i < (int)s.size(); ++i) {
    pos[s[i] - 'a'].push_back(i);
  }
  for (int i = 0; i < m; ++i) {
    cin >> t[i];
    int stat = 0;
    for (char c : t[i]) stat |= 1 << (c - 'a');
    mp.emplace(stat, i);
  }
  fill(pos2, pos2 + 26, -1);
  set<pair<int, int>> st;
  for (int i = 0; i < 26; ++i) {
    if (!pos[i].empty()) st.emplace(pos[i][0], i);
  }
  for (int l = 0; l < (int)s.size(); ++l) {
    int v2 = *max_element(pos2, pos2 + 26), stat = 0;
    for (auto p : st) {
      stat |= 1 << p.second;
      if (v2 != -1 && (stat & (1 << (s[v2] - 'a')))) break;
      if (mp.count(stat)) ans[mp[stat]]++;
    }
    st.erase(pair<int, int>(l, (int)(s[l] - 'a')));
    if (++curpos[s[l] - 'a'] < (int)pos[s[l] - 'a'].size()) {
      st.insert(pair<int, int>(pos[s[l] - 'a'][curpos[s[l] - 'a']],
                               (int)(s[l] - 'a')));
    }
    pos2[s[l] - 'a'] = l;
  }
  for (int i = 0; i < m; ++i) {
    int stat = 0;
    for (char c : t[i]) stat |= 1 << (c - 'a');
    cout << ans[mp[stat]] << '\n';
  }
  return 0;
}
