Pagini recente » Cod sursa (job #539014) | Cod sursa (job #1722447) | Cod sursa (job #2724652) | Cod sursa (job #1880542) | Cod sursa (job #2977201)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
long long pi[2000005],v[2000005];
char a[4000005],b;
int main()
{
int n,aux,i,maxx=0,nr=0,x;
cin>>a;
n=strlen(a);
a[n]='#';
aux=n;
while(cin>>b){
n++;
a[n]=b;
}
for(i=1;i<=n;i++){
x=pi[i-1];
while(x>0){
if(a[x]==a[i]){
pi[i]=x+1;
x=-1;
}
else
x=pi[x - 1];
}
if(x==0){
if(a[0]==a[i] && i!=0)
pi[i]=1;
else
pi[i]=0;
}
if(i>aux)
if(aux==pi[i]){
nr++;
v[nr]=i;
}
}
cout<<nr<<'\n';
if(nr>1000)
nr=1000;
for(i=1;i<=nr;i++)
cout<<v[i]-aux-aux<<" ";
return 0;
}