//??\?°???????????????????
//sa[]?????\?°?????????´???
#include<iostream>
#include<string>
#include<algorithm>

#define MAX_N 100000000

using namespace std;


//?????????+??????????????????
int n,k;
int rank[MAX_N + 1];
int tmp[MAX_N + 1];


bool compare_sa(int i, int j)
{
	if(rank[i] != rank[j]) 
	{
		return rank[i] < rank[j];
	}
	else
	{
	int ri = i + k <= n ? rank[i + k] : -1;
	int rj = j + k <= n ? rank[j + k] : -1;
	return ri < rj;
	}
}

//?????????s?????\?°??????????????§????
void construct_sa(string s,int *sa)
{
	n = s.length();
	
	//???????????????????????????????????????????????§??????
	for(int i = 0; i <= n;i++)
	{
		sa[i] = i;
		rank[i] = i < n ? s[i] : -1;
	}
	
	//k????????????????????????????????????????????¨???????????????2k????????§???????????????
	for(k = 1;k <= n ; k *= 2)
	{
		sort(sa,sa + n + 1,compare_sa);
		
		//?????£??????tmp?????\????????????rank????§????
		tmp[sa[0]] = 0;
		for(int i = 1; i <= n; i++)
		{
			tmp[sa[i]] = tmp[sa[i -1]] + (compare_sa(sa[i - 1],sa[i]) ? 1 : 0);
		}
		for(int i = 0;i <= n;i++)
		{
			rank[i] = tmp[i];
		}
	}
}

bool contain(string s,int *sa, string t)
{
	int a = 0,b = s.length();
	while(b - a > 1)
	{
		int c = (a + b) / 2;
		
		if(s.compare(sa[c],t.length(),t) < 0) a = c;
		else b = c;
	}
	
	return (s.compare(sa[b], t.length(),t) == 0);
	
}


int main()
{
	string S;
	int N,sa[MAX_N];
	
	
	cin >> S >> N;
	
	construct_sa(S,sa);
	
	for(int i = 0 ;i < N;i++)
	{
		string T;
		cin >> T;
		if(contain(S,sa,T)) cout << 1 << endl;
		else cout << 0 << endl;
	}
	
	return 0;
}