#include <iostream>
#include <string>
using namespace std;
void get_next(string ssub,int *next){
int i=3;
next[1]=0;next[2]=1;
while(i<ssub.size()){
int j=i-1;
while(j>0){
if(ssub[i-1]==ssub[next[j]]) {
next[i]=next[i-1]+1;
if(ssub[i]==ssub[next[i]]) next[i]=0;
break;
}
else j=next[j];
}
}
}
int kmp(string smain,string ssub,int *next){
int i=1,j=1;
while(i<smain.size()&&j<ssub.size()){
if(smain[i]==ssub[j]||j==0){
++i;++j;
}
else{
j=next[j];
}
}
if(j>=ssub.size()) return i-ssub.size();
else return 0;
}
int main(){
string smain=" abcacadaba";
string ssub=" ad";
int *next=new int[ssub.size()];
get_next(ssub,next);
int position=kmp(smain,ssub,next);
cout<<position<<endl;
return 0;
}