#include #define FOR(i, n) for(int i = 0; i < n; i++) #define file_in(a) freopen(a, "r", stdin) #define file_out(a) freopen(a, "w", stdout) using namespace std; static const int MAXN = 10000008; int cnt = 0; int lsp[MAXN>>1]; string pat, txt; void input() { cin >> txt; } void calkLsp(int n) { int i = 1, len = 0; lsp[0] = 0; while(i < n) { if(pat[i] == pat[len]) { len++; lsp[i] = len; i++; } else { if(len != 0) len = lsp[len-1]; else { lsp[i] = 0; i++; } } } } void seatchLongestMatch(int n) { int i = 0; int j = 0; while(i < n) { if(pat[j] == txt[i]) { i++; j++; } if (j == pat.size()) { cnt += 1; j = lsp[j-1]; } else if(i < n and pat[j] != txt[i]) { if(j != 0) j = lsp[j-1]; else i++; } } } int main() { file_in("clown.in"); file_out("clown.out"); input(); int q; scanf("%d", &q); for(int i = 0; i < q; i++) { cin >> pat; calkLsp(pat.size()); seatchLongestMatch(txt.size()); printf("%d\n", cnt); cnt = 0; fill(lsp, lsp + pat.size(), 0); } }