#include <iostream>
#include <string>
#include <vector>
using namespace std;
int nexts[100];
int Index_KMP(string s,string t,int pos)
{
int sl=s.size();
int tl=t.size();
int i=pos;
int j=0;
while(i<sl&&j<tl)
{
if(s[i]==t[j]||j==-1)
{
i++;
j++;
}
else
j=nexts[j];
}
if(j>=tl)
{
//cout<<t.size();
return i-tl;
}
else
return 0;
}
void get_next(string t)
{
int i=0;
nexts[0]=-1;
int j=-1;
while(i<t.size()-1)
{
if(t[i]==t[j]||j==-1)
{
i++;
j++;
nexts[i]=j;
}
else j=nexts[j];
}
}
int main()
{
string t="aacb";
string s="baacbadaabaaacb";
get_next(t);
cout<<Index_KMP(s,t,0);
return 0;
}