#include <bits/stdc++.h>
using namespace std;
vector<int> rabin_karp(string_view text, string_view pattern)
{
int n = text.size();
int m = pattern.size();
if (n < m)
return {};
constexpr int P1 = 257, P2 = 263;
constexpr int MOD = 1e9 + 7;
vector<long long> p_pow1(n), p_pow2(n);
p_pow1[0] = 1;
p_pow2[0] = 1;
for (int i = 1; i < n; i++) {
p_pow1[i] = (p_pow1[i - 1] * P1) % MOD;
p_pow2[i] = (p_pow2[i - 1] * P2) % MOD;
}
vector<long long> h1(n + 1), h2(n + 1);
h1[0] = 0;
h2[0] = 0;
for (int i = 0; i < n; i++) {
h1[i + 1] = (h1[i] + text[i] * p_pow1[i]) % MOD;
h2[i + 1] = (h2[i] + text[i] * p_pow2[i]) % MOD;
}
long long h_p1 = 0;
long long h_p2 = 0;
for (int i = 0; i < m; i++) {
h_p1 = (h_p1 + pattern[i] * p_pow1[i]) % MOD;
h_p2 = (h_p2 + pattern[i] * p_pow2[i]) % MOD;
}
vector<int> indices;
for (int i = 0; i + m - 1 < n; i++) {
long long t1 = (h1[i + m] + MOD - h1[i]) % MOD;
long long t2 = (h2[i + m] + MOD - h2[i]) % MOD;
if (t1 == h_p1 * p_pow1[i] % MOD && t2 == h_p2 * p_pow2[i] % MOD) {
indices.push_back(i);
if (indices.size() == 1000)
break;
}
}
return indices;
}
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
string text;
string pattern;
cin >> pattern >> text;
vector<int> indices = rabin_karp(text, pattern);
cout << indices.size() << '\n';
for (int i : indices)
cout << i << ' ';
cout << '\n';
return 0;
}