#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct str{
string s;
int next[50]={0};
};
string zhu="555asssada555dsf";
void getnext(str& sub){
int i=0,j=-1;
sub.next[0]=-1;
while(i<sub.s.size()-1){
if(j==-1||sub.s[i]==sub.s[j]){
++j;
++i;
sub.next[i]=j;
}
else
j=sub.next[j];
}
}
int kmp(str sub){
int i=0,j=0;
while(i<zhu.size()&&j<sub.s.size()){
if(j==0||zhu[i]==sub.s[j]){
i++;
j++;
}else{
j=sub.next[j];
}
}
if(j==sub.s.size())
return (i-sub.s.size());
else
return -1;
}
int main(){
str sub;
cin>>sub.s;
getnext(sub);
for(int i=0;i<sub.s.size();i++){
printf("%d ",sub.next[i]);
}
printf("匹配到了!在第%d个字符!",kmp(sub));
return 0;
}