cpp nlogn
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
string t, s; getline(cin, t); getline(cin, s);
int ts = t.size(); int ss = s.size();
vector<int> pi(ss);//pi[x] = y ์ผ ๋, x ์ง์ ์์ ์ด์ ๋ฌธ์์ด๊ณผ y๋งํผ ์ ๋ฏธ/๋ ์ฌ๊ฐ ์ผ์นํจ.
// ๋ถ๋ถ ๋ฌธ์์ด ๋ณ ์ ๋์ฌ ์ ๋ฏธ์ฌ ์ต๋ ์ค์ฒฉ ๊ธธ์ด ์ ์ฒ๋ฆฌ
int cur = 0;//๋ถ๋ถ ๋ฌธ์์ด ํฌ์ธํฐ
for (int i = 1; i < ss; i++) {
while (cur > 0 && s[i] != s[cur]) {
cur = pi[cur - 1];//์ด์ ์ ๋ฏธ/๋ ์ฌ ์ผ์น ์๋ฆฌ ์ฐพ๊ธฐ
}
if (s[i] == s[cur]) {//ํ์ฌ ์๋ฆฌ๊ฐ ์ผ์นํ๋ค๋ฉด
pi[i] = ++cur;// ์ ์ฅํ๊ณ ๋ค์ ์๋ฆฌ ํ์ธ
}
}
cur = 0;//๋ถ๋ถ ๋ฌธ์์ด ์์น ํฌ์ธํฐ
vector<int> pos;
for (int i = 0; i < ts; i++) {
while (cur > 0 && t[i] != s[cur]) { // ๋ฌธ์์ด์ ์์ ์ง์ ์ด ์ผ์นํ๋ ์ง์ ํ์
cur = pi[cur - 1];
}
if (t[i] == s[cur]) { // ์ผ์นํ ๊ฒฝ์ฐ
if (cur == ss - 1) { // ์ ํด์ง ๊ธธ์ด๋ฅผ ์ฑ์ ์ ๊ฒฝ์ฐ
pos.push_back(i - ss + 2); // ์์ ์ง์ ๊ฒ์
cur = pi[cur]; // ์ ์ฒด ๋ฌธ์์ด์ด ์ผ์นํ์ผ๋ฏ๋ก ๋ค์ ํ์์ ํ์ฌ ๋ถ๋ถ ๋ฌธ์์ด ์ ๋ฏธ/๋ ์ฌ๊ฐ ์ผ์นํ๋ ์ง์ ๋ถํฐ ํ์ ์์
}
else {
cur++; //๋ค์ ํ์ ์ง์ ๊ฒ์
}
}
}
cout << pos.size() << "\n";
for (const auto& p : pos) {
cout << p << "\n";
}
return 0;
}