#include <cstdio> #include <cstring> #include <cctype> #include <cmath> #include <set> #include <map> #include <list> #include <queue> #include <deque> #include <stack> #include <string> #include <bitset> #include <vector> #include <iostream> #include <algorithm> #include <stdlib.h> using namespace std; typedef long long LL; const int INF=2e9+1e8; const int MOD=1e9+7; const int MAX_SIZE=1005; void set_kmp_next(int *kmp_next,int len,string& b) { int i=0,j=-1; kmp_next[0]=-1; while(i<len) { if(j==-1||b[i]==b[j]) { i++; j++; kmp_next[i]=j; } else j=kmp_next[j]; } } int kmp(string &a,string& b) // a 为原串 ,b 为模式串 { int i,j,lena=a.size(),lenb=b.size(); int kmp_next[MAX_SIZE]; set_kmp_next(kmp_next,lenb,b); i=j=0; while(i<lena) { if(j==-1||a[i]==b[j]) { i++; j++; } else j=kmp_next[j]; if(j==lenb) return i-j+1; } return -1; } int main() { string a,b; while(cin>>a>>b) { cout<<kmp(a,b)<<endl; } return 0; }