Subsequence
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <string>
#include <stack>
#include <set>
#include <vector>
#include <map>
#define mod 1e9+7
#define inf 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
vector<int>vec[100];
int main(){
char s[100000];
scanf("%s",s);
int t;
scanf("%d",&t);
int len=strlen(s);
for(int i=0;i<len;i++){
vec[(int)(s[i]-'a')].push_back(i);
}
// for(int i=0;i<26;i++){
// for(int j=0;j<vec[i].size();j++){
// cout<<vec[i][j]<<" ";
// }
// cout<<endl;
// }
int cd[30];
for(int i=0;i<26;i++){
cd[i]=vec[i].size();
}
char s2[100000];
while(t--){
scanf("%s",s2);
int len2=strlen(s2);
int k=0;
int miss=0;
for(int i=0;i<len2;i++){
int v=(int)s2[i]-'a';
// for(int j=0;j<(int)vec[(int)s2[i]-'a'].size();j++){
// cout<<vec[(int)s2[i]-'a'][j]<<" ";
// cout<<endl;
// }
if(cd[v]==0){
printf("NO\n");
miss=1;
break;
}
int p2 = lower_bound(vec[v].begin(),vec[v].end(),k)-vec[v].begin();
//cout<<"p2"<<p2<<endl;
if(p2>=cd[v]){
cout<<cd[v]<<endl;
printf("NO\n");
miss=1;
break;
}
else{
k=*(p2+vec[v].begin())+1;
}
// cout<<k<<endl;
}
if(miss==0){
printf("YES\n");
}
}
return 0;
}