#include <iostream>
#include <string>
using namespace std;
int* Next(string P)
{
int m=P.size();
int k;
int *N=new int [m];
N[0]=0;
for (int i=1;i<m;i++)
{
k=N[i-1];
while (k>0 && P[i]!=P[k])
{
k=N[k-1];
}
if (P[i]==P[k])
{
N[i]=k+1;
}
else
N[i]=0;
}
return N;
}
int Search(string S,string P,int *N,int start)
{
int n1=S.size();
int n2=P.size();
int last=n1-n2;
if (last<0)
return -1;
int j=0;
for (int i=start;i<n1;i++)
{
while (S[i]!=P[j] && j>0)
{
j=N[j-1];
}
if (S[i]==P[j])
j++;
if (j==n2)
return (i-j+2);
}
return -1;
}
void main()
{
string s="aabcaabdedd";
string p="de";
int *N=Next(p);
int m=Search(s,p,N,0);
cout<<m;
}