#include <bits/stdc++.h>   using namespace std;   const double PI = acos(-1.0);   template <class T>   T SQR(const T &a) {     return a * a;   }   void run() {     char str[1000100];     scanf( %s , str);     int n = strlen(str);     int m;     cin >> m;     int A[10001];     int B[10001];     map<int, int> res;     char pat[100];     for (int i = (0), ei = (m); i < ei; i++) {       scanf(  %s , pat);       int mask = 0;       for (int j = (0), ej = (strlen(pat)); j < ej; j++)         mask |= 1 << (pat[j] -  a );       B[i] = A[i] = mask;     }     sort(B, B + m);     int Pos[26] = {0};     for (int i = (0), ei = (26); i < ei; i++) Pos[i] = -1;     int mask = 0, curr;     pair<int, int> P[26];     str[n] =  z  + 1;     for (int i = (0), ei = (n); i < ei; i++) {       mask |= 1 << (str[i] -  a );       Pos[str[i] -  a ] = i;       for (int j = (0), ej = (26); j < ej; j++) {         P[j].first = Pos[j];         P[j].second = j;       }       sort(P, P + 26);       curr = mask;       int next = 1 << (str[i + 1] -  a );       if (binary_search(B, B + m, mask) && (mask & next) == 0) res[mask]++;       for (int j = (0), ej = (25); j < ej; j++)         if (P[j].first != -1) {           curr &= ~(1 << P[j].second);           if (binary_search(B, B + m, curr) && (curr & next) == 0) res[curr]++;         }     }     for (int i = (0), ei = (m); i < ei; i++) printf( %d n , res[A[i]]);   }   int main() {     run();     return 0;   }   