#include #include using namespace std; vector table,res; int n; string s,t; vector pre_kmp(string s){ vector v(s.size()+1); int k; v[0]=-1; for(int i=1;i<=s.size();i++){ k=v[i-1]; while(k>=0){ if(s[k]==s[i-1])break; else k=v[k]; } v[i]=k+1; } return v; } void match(string s, string t){ int head = 0, j = 0, slen=s.size(),tlen=t.size(); while(head + j < slen){ if(t[j] == s[head + j]){ if(++j != tlen) continue; res.push_back(head); } head += j - table[j], j = max(table[j], 0); } } int main(void){ cin>>s>>n; for(int i=0;i>t; table=pre_kmp(t); match(s,t); } //for(auto x:res)cout<