#include <fstream>
#include <vector>
#include <cstring>
const int B=127;
const int MOD1=666013;
const int MOD2=1000003;
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[2000005], b[2000005];
vector <int> v;
int lga, lgb, pt1, pt2, cod1a, cod1b, i, cod2b, cod2a;
int h(char *, int, int, int);
int next_hash(char *, int, int, int, int, int);
int rid_pt(int, int, int);
int main()
{
fin>>a>>b;
lga=strlen(a); lgb=strlen(b);
if(lga>lgb)
{
fout<<0<<'\n';
return 0;
}
cod1a=h(a, 0, lga-1, MOD1); cod2a=h(a, 0, lga-1, MOD2);
cod1b=h(b, 0, lga-1, MOD1); cod2b=h(b, 0, lga-1, MOD2);
if(cod1a==cod1b && cod2a==cod2b)
{
v.push_back(0);
}
pt1=rid_pt(B, lga-1, MOD1);
pt2=rid_pt(B, lga-1, MOD2);
for(i=lga; i<lgb; i++)
{
cod1b=next_hash(b, i, i-lga, cod1b, pt1, MOD1);
cod2b=next_hash(b, i, i-lga, cod2b, pt2, MOD2);
if(cod1b==cod1a && cod2a==cod2b)
{
v.push_back(i-lga+1);
}
}
fout<<v.size()<<'\n';
for(i=0; i<min(1000, int(v.size())); i++) fout<<v[i]<<' ';
fout<<'\n';
}
int h(char *a, int start, int final, int MOD)
{
int i, hs=0;
for(i=start; i<=final; i++)
{
hs=((hs*B)%MOD+int(a[i]))%MOD;
}
return hs;
}
int rid_pt(int nr, int pt, int MOD)
{
int p=1;
while(pt--)
{
p=(p*nr)%MOD;
}
return p;
}
int next_hash(char *s, int poz, int pozf, int cod, int pt, int MOD)
{
int elim = ( cod - ( int(s[pozf]) * pt ) %MOD + MOD ) %MOD;
cod=(elim * B + int(s[poz]) )%MOD;
return cod;
}