#include <iostream> #include <string> using namespace std; void getnext(char b[],int next[]) { int i,j,lb,k=0; lb=strlen(b); i=0; j=-1; next[0]=-1; while(i<lb){ if(j==-1||b[i]==b[j]){ ++i;++j; if(b[i]==b[j]) next[i]=next[j]; else next[i]=j; } else j=next[j]; } for(i=0;i<lb;++i) cout<<next[i]<<" "<<endl; } void kmp(char a[],char b[]) { int i=0,j=0,la,lb,next[100]={0}; getnext(b,next); la=strlen(a); lb=strlen(b); while(i<la){ if(a[i]==b[j]){ i++; j++; } else{ if(j==-1){ j=0; i++; } else{ j=next[j]; } } if(j==lb){ cout<<i-j+1<<endl; break; } } } int main(void) { char a[100],b[100]; cin>>a>>b; kmp(a,b); return 0; }