#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)
#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>
using namespace std;
const int oo = 1e18;
const int mod = 1e9 + 7;
const int nmax = 1e6 + 8;
const int base = 31;
//string a, b;
int n, m, p[nmax];
void tao(){
p[0] = 1;
for(int i = 1; i <= 1e6; ++i){
p[i] = (p[i - 1] * base) % mod;
}
}
struct{
int h[nmax];
string s;
int get(int l, int r){
return (h[r] - h[l - 1] * p[r - l + 1] + mod * mod) % mod;
}
void pre(){
for(int i = 1; i < s.size(); ++i){
h[i] = (h[i - 1] * base + s[i] - 'a' + 1) % mod;
}
}
} a, b;
main(){
fast;
openfile();
tao();
cin >> a.s >> b.s;
n = a.s.size(), m = b.s.size();
a.s = ' ' + a.s, b.s = ' ' + b.s;
a.pre(), b.pre();
int cnt = 0;
for(int i = 1; i <= n - m + 1; ++i){
if(a.get(i, i + m - 1) == b.get(1, m)){
cout << i << ' ';
}
}
// cout << cnt;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZGVmaW5lIGxnMihuKSAoNjMtX19idWlsdGluX2NsemxsKG4pKQojZGVmaW5lIG1hc2sobikgKDFMTCA8PCAobikpCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIG9wZW5maWxlKCk7ICBpZiggZm9wZW4oVEFTSyIuaW5wIiwgInIiKSl7ZnJlb3BlbihUQVNLIi5pbnAiLCAiciIsIHN0ZGluKTtmcmVvcGVuKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgbGMobikgKG4gPDwgMSkKI2RlZmluZSByYyhuKSAoKG4gPDwgMSkgfCAxKQoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIEZPUihpLCBsLCByLCBrKSBmb3IoIGludCBpID0gbDsgaSA8PSByOyBpICs9IGspCiNkZWZpbmUgRk9EKGksIHIsIGwsIGspIGZvciggaW50IGkgPSByOyBpID49IGw7IGkgLT0gaykKCiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIHVtaSB1bm9yZGVyZWRfbWFwPGludCwgaW50PgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IG5tYXggPSAxZTYgKyA4Owpjb25zdCBpbnQgYmFzZSA9IDMxOwoKLy9zdHJpbmcgYSwgYjsKaW50IG4sIG0sIHBbbm1heF07Cgp2b2lkIHRhbygpewogICAgcFswXSA9IDE7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IDFlNjsgKytpKXsKICAgICAgICBwW2ldID0gKHBbaSAtIDFdICogYmFzZSkgJSBtb2Q7CiAgICB9Cn0KCnN0cnVjdHsKICAgIGludCBoW25tYXhdOwogICAgc3RyaW5nIHM7CiAgICBpbnQgZ2V0KGludCBsLCBpbnQgcil7CiAgICAgICAgcmV0dXJuIChoW3JdIC0gaFtsIC0gMV0gKiBwW3IgLSBsICsgMV0gKyBtb2QgKiBtb2QpICUgbW9kOwoKICAgIH0KICAgIHZvaWQgcHJlKCl7CiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8IHMuc2l6ZSgpOyArK2kpewogICAgICAgICAgICBoW2ldID0gKGhbaSAtIDFdICogYmFzZSArIHNbaV0gLSAnYScgKyAxKSAlIG1vZDsKICAgICAgICB9CiAgICB9Cn0gYSwgYjsKCm1haW4oKXsKICAgIGZhc3Q7CiAgICBvcGVuZmlsZSgpOwogICAgdGFvKCk7CiAgICBjaW4gPj4gYS5zID4+IGIuczsKICAgIG4gPSBhLnMuc2l6ZSgpLCBtID0gYi5zLnNpemUoKTsKICAgIGEucyA9ICcgJyArIGEucywgYi5zID0gJyAnICsgYi5zOwogICAgYS5wcmUoKSwgYi5wcmUoKTsKICAgIGludCBjbnQgPSAwOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuIC0gbSArIDE7ICsraSl7CiAgICAgICAgaWYoYS5nZXQoaSwgaSArIG0gLSAxKSA9PSBiLmdldCgxLCBtKSl7CiAgICAgICAgICAgIGNvdXQgPDwgaSA8PCAnICc7CiAgICAgICAgfQogICAgfQovLyAgICBjb3V0IDw8IGNudDsKfQo=