#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
#define int long long
char A[2000006];
char B[2000006];
int mod1 = 1000000007;
int mod2 = 1000000009;
vector<int> v;
int32_t main()
{
v.reserve(1000);
fin.getline(A, 2000006);
fin.getline(B, 2000006);
int na = strlen(A);
int nb = strlen(B);
if (na > nb) {
fout << 0 << '\n';
return 0;
}
int64_t ha1 = 0, p1 = 1;
int64_t ha2 = 0, p2 = 1;
for (int i = 0; i < na; i++) {
ha1 = (ha1 * 73 + A[i]) % mod1;
ha2 = (ha2 * 73 + A[i]) % mod2;
if (i != 0) {
p1 = (p1 * 73) % mod1;
p2 = (p2 * 73) % mod2;
}
}
int hb1 = 0;
int hb2 = 0;
for (int i = 0; i < na; i++) {
hb1 = (hb1 * 73 + B[i]) % mod1;
hb2 = (hb2 * 73 + B[i]) % mod2;
}
long long total = 0;
if (ha1 == hb1 && ha2 == hb2) {
total++;
if (v.size() < 1000) v.push_back(0);
}
for (int i = na; i < nb; i++) {
int val_ch_ex = (int64_t)(B[i - na] * p1) % mod1; // ce tai
int val_hash_atm = (hb1 - val_ch_ex + mod1) % mod1;
hb1 = ((int64_t)val_hash_atm * 73 + B[i]) % mod1; // adaug noul char
val_ch_ex = (int64_t)(B[i - na] * p2) % mod2; // ce tai
val_hash_atm = (hb2 - val_ch_ex + mod2) % mod2; // hash-ul cu primul char taiat
hb2 = ((int64_t)val_hash_atm * 73 + B[i]) % mod2; // adaug noul char
if (ha1 == hb1 && ha2 == hb2) {
total++;
if (v.size() < 1000)
v.push_back(i - na + 1);
}
}
fout << total << '\n';
for (int x : v) {
fout << x << ' ';
}
return 0;
}