/*
* @Author: hungeazy
* @Date: 2026-03-04 23:24:15
* @Last Modified by: hungeazy
* @Last Modified time: 2026-04-04 15:20:41
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MOD 1000000007
const int N = (int)1e6+10, base = 311;
string A,B;
int hashA[N],hashB,pw[N];
int hashing(int hashVal, char h) {
return (hashVal*base%MOD+h)%MOD;
}
int getHash(int l, int r) {
return (hashA[r]-hashA[l-1]*pw[r-l+1]%MOD+MOD)%MOD;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> A >> B;
pw[0] = 1;
int n = A.size(), m = B.size();
A = '#'+A; B = '#'+B;
for (int i = 1; i <= n; i++)
{
pw[i] = pw[i-1]*base%MOD;
hashA[i] = hashing(hashA[i-1],A[i]);
}
for (int i = 1; i <= m; i++) hashB = hashing(hashB,B[i]);
for (int i = 1; i <= n-m+1; i++)
if (getHash(i,i+m-1) == hashB) cout << i << " ";
return 0;
}
LyoKKiBAQXV0aG9yOiBodW5nZWF6eQoqIEBEYXRlOiAgIDIwMjYtMDMtMDQgMjM6MjQ6MTUKKiBATGFzdCBNb2RpZmllZCBieTogICBodW5nZWF6eQoqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjYtMDQtMDQgMTU6MjA6NDEKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CmNvbnN0IGludCBOID0gKGludCkxZTYrMTAsIGJhc2UgPSAzMTE7CnN0cmluZyBBLEI7CmludCBoYXNoQVtOXSxoYXNoQixwd1tOXTsKCmludCBoYXNoaW5nKGludCBoYXNoVmFsLCBjaGFyIGgpIHsKICAgIHJldHVybiAoaGFzaFZhbCpiYXNlJU1PRCtoKSVNT0Q7Cn0KCmludCBnZXRIYXNoKGludCBsLCBpbnQgcikgewogICAgcmV0dXJuIChoYXNoQVtyXS1oYXNoQVtsLTFdKnB3W3ItbCsxXSVNT0QrTU9EKSVNT0Q7Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKICAgIGNpbiA+PiBBID4+IEI7CiAgICBwd1swXSA9IDE7CiAgICBpbnQgbiA9IEEuc2l6ZSgpLCBtID0gQi5zaXplKCk7CiAgICBBID0gJyMnK0E7IEIgPSAnIycrQjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBwd1tpXSA9IHB3W2ktMV0qYmFzZSVNT0Q7CiAgICAgICAgaGFzaEFbaV0gPSBoYXNoaW5nKGhhc2hBW2ktMV0sQVtpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIGhhc2hCID0gaGFzaGluZyhoYXNoQixCW2ldKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4tbSsxOyBpKyspCiAgICAgICAgaWYgKGdldEhhc2goaSxpK20tMSkgPT0gaGFzaEIpIGNvdXQgPDwgaSA8PCAiICI7CiAgICByZXR1cm4gMDsKfQ==