#include<iostream>#include<algorithm>usingnamespace std;constint maxn =110000;int dp[maxn *2+5];char str[maxn *2+5];char S[maxn +5];int manacher (char*s){int n =0, len =strlen(s +1);
str[0]='$';for(int i =1; i <= len; i ++){
str[++ n]='#';
str[++ n]= s[i];}
str[++ n]='#',str[++ n]='@';int right =0, center =0;for(int i =1; i <= n; i ++){if(i < right) dp[i]= min (dp[2* center - i], right - i);else dp[right = i]=1;while(str[i - dp[i]]== str[i + dp[i]]) dp[i]++;if(i + dp[i]> right){
right = i + dp[i];
center = i;}}int ret =0;for(int i =1; i <= n; i ++){
ret = max (ret, dp[i]-1);}return ret;}intmain(){while(~scanf("%s", S +1)){printf("%d\n",manacher(S));}return0;}
#include<iostream>usingnamespace std;constint maxn =1e6+5;constint maxm =10+5;int trie[maxn][26];int num[maxn]={0};char s[maxm];int pos =1;voidinsert(char s[]){int p =0;for(int i =0; s[i]; i ++){int n = s[i]-'a';if(trie[p][n]==0) trie[p][n]= pos++;
p = trie[p][n];
num[p]++;}}int find (char s[]){int p =0;for(int i =0; s[i]; i++){int n = s[i]-'a';if(trie[p][n]==0)return0;
p = trie[p][n];}return num[p];}int main (){while(gets(s)&& s[0]!='\0')insert(s);while(~scanf("%s", s))printf("%d\n",find(s));return0;}