use std::io::{BufWriter, Write};
use std::fs::{self, File};
fn main() -> std::io::Result<()> {
let content = fs::read_to_string("strmatch.in")?;
let mut writer = BufWriter::new(File::create("strmatch.out")?);
let mut lines = content.lines();
let a = lines.next().unwrap();
let b = lines.next().unwrap();
let mystring: Vec<char> = a.chars()
.chain(std::iter::once('$'))
.chain(b.chars())
.collect();
let mut pi: Vec<usize> = vec![0; mystring.len()];
for i in 1..mystring.len() {
let mut j = pi[i - 1];
while j > 0 && mystring[i] != mystring[j] {
j = pi[j - 1];
}
if mystring[i] == mystring[j] {
j += 1;
}
pi[i] = j;
}
let answer: Vec<usize> = pi.iter()
.enumerate()
.skip(a.len() + 1)
.filter(|&(_, v)| *v == a.len())
.map(|(i, _)| i - 2 * a.len())
.collect();
writeln!(writer, "{}", answer.len())?;
for item in answer.iter().take(1000) {
write!(writer, "{} ", item)?;
}
Ok(())
}