#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;
}
