#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
vector<int> getLongestCommonPrefixSubfix(string input) {
int stringLength = input.size();
vector<int> longestCommonPrefixSubfix(stringLength);
for (int i = 1; i < stringLength; i++) {
int prefixSubfix = longestCommonPrefixSubfix[i - 1];
while (prefixSubfix > 0 && input[i] != input[prefixSubfix]) {
prefixSubfix = longestCommonPrefixSubfix[prefixSubfix];
}
longestCommonPrefixSubfix[i] = prefixSubfix + (input[i] == input[prefixSubfix]);
}
return longestCommonPrefixSubfix;
}
void printSizeAndElements(const vector<int>& v) {
fout << v.size() << "\n";
for (int i = 0; i < (int)v.size() && i < 1000; i++) {
fout << v[i] << " ";
}
}
vector<int> findOccurrences(string smallString, string largeString) {
vector<int> longestCommonPrefixSubfix = getLongestCommonPrefixSubfix(smallString);
vector<int> occurrences;
int nextIndexToMatch = 0;
for (int i = 0; i < (int)largeString.size(); i++) {
// fout << "Arrived on index " << i << ". Next index to match=" << nextIndexToMatch << "\n";
if (largeString[i] == smallString[nextIndexToMatch]) {
if (nextIndexToMatch == (int)smallString.size() - 1) {
occurrences.push_back(i - smallString.size() + 1);
nextIndexToMatch = longestCommonPrefixSubfix[smallString.size() - 1];
} else {
nextIndexToMatch++;
}
} else if (nextIndexToMatch > 0) {
while (nextIndexToMatch > 0 && largeString[i] != smallString[nextIndexToMatch]) {
nextIndexToMatch = longestCommonPrefixSubfix[nextIndexToMatch - 1];
}
}
}
return occurrences;
}
int main() {
string A;
string B;
fin >> A >> B;
vector<int> occurrences = findOccurrences(A, B);
printSizeAndElements(occurrences);
return 0;
}