Pagini recente » Cod sursa (job #1550680) | Cod sursa (job #899988) | Cod sursa (job #1577188) | Monitorul de evaluare | Cod sursa (job #1468966)
#include <cstdio>
#include <vector>
#define LMAX 2000007
#define MOD 666013
using namespace std;
char a[LMAX],b[LMAX];
int p[LMAX];
vector<int> h1[MOD];
int main()
{
freopen ("strmatch.in","r",stdin);
freopen ("strmatch.out","w",stdout);
char ch;
int p1=0;
while(1)
{
scanf("%c",&ch);
if(ch=='\n') break;
a[++p1]=ch;
}
p[0]=1;
for(int i=1;i<p1;i++)
{
p[i]=p[i-1]*26;
p[i]%=MOD;
}
int val=0,key=0;
for(int i=1;i<=p1;i++)
{
scanf("%c",&b[i]);
val+=p[p1-i]*(a[i]-'A');
val%=MOD;
key+=p[p1-i]*(b[i]-'A');
key%=MOD;
}
h1[key].push_back(0);
for(int i=p1+1;;i++)
{
scanf("%c",&ch);
if(feof(stdin)) break;
b[i]=ch;
key=key-(p[p1-1]*(b[i-p1]-'A')%MOD);
key*=26;
key%=MOD;
key+=p[0]*(b[i]-'A');
h1[key].push_back(i-p1);
}
int ss=h1[val].size();
printf("%d\n",ss);
if(ss>1000) ss=1000;
for(int i=0;i<ss;i++) printf("%d ",h1[val][i]);
}