#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cctype>
#include <cassert>
#include <climits>
#include <string>
#include <bitset>
#include <cfloat>
#include <random>
#include <unordered_set>
#pragma GCC optimize("Ofast")
using namespace std;
typedef long double ld;
typedef long long int ll;
typedef unsigned long long int ull;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<bool> vb;
typedef vector<double> vd;
typedef vector<string> vs;
typedef vector<ll> vll;
typedef vector<pair<int,int> > vpii;
typedef vector<vector<int> > vvi;
typedef vector<vector<char> > vvc;
typedef vector<vector<string> > vvs;
typedef vector<vector<ll> > vvll;
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define rrep(i,n) for(int i = 1; i <= (n); ++i)
#define irep(it, stl) for(auto it = stl.begin(); it != stl.end(); it++)
#define drep(i,n) for(int i = (n) - 1; i >= 0; --i)
#define fin(ans) cout << (ans) << '\n'
#define STLL(s) strtoll(s.c_str(), NULL, 10)
#define mp(p,q) make_pair(p, q)
#define pb(n) push_back(n)
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define Sort(a) sort(a.begin(), a.end())
#define Rort(a) sort(a.rbegin(), a.rend())
#define MATHPI acos(-1)
#define itn int;
#define endl '\n';
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
template <class T> inline bool chmax(T& a,T b){if(a<b){a=b;return 1;} return 0;}
template <class T> inline bool chmin(T& a,T b){if(a>b){a=b;return 1;} return 0;}
inline string getline(){string s; getline(cin,s); return s;}
inline void yn(const bool b){b?fin("yes"):fin("no");}
inline void Yn(const bool b){b?fin("Yes"):fin("No");}
inline void YN(const bool b){b?fin("YES"):fin("NO");}
struct io{io(){ios::sync_with_stdio(false);cin.tie(0);}};
const int INF = INT_MAX;
const ll LLINF = 1LL<<60;
const ll MOD = 1000000007;
const double EPS = 1e-9;


std::mt19937 mt{ std::random_device{}() };
std::uniform_int_distribution<int> dist(129, INF);
const int BASE = dist(mt);

class RollingHash {
public:
    string str;
    vector<ull> powBase, csumHash;
    const ull ROLMOD = (1LL << 61) - 1;
    const ull MASK30 = (1LL << 30) - 1;
    const ull MASK31 = (1LL << 31) - 1;
    const ull LLMAX = ROLMOD*((1LL << 3) - 1);

    RollingHash(const string s) : str(s) {
        powBase.resize(s.size() + 1);
        csumHash.resize(s.size() + 1);
        powBase[0] = 1;
        for(int i = 0; i < s.size(); i++) {
            powBase[i + 1] = calcMod(multiple(powBase[i], BASE));
        }
    }

    void rollingHash() {
        csumHash[0] = 0;
        for(int i = 0; i < str.size(); ++i) {
            csumHash[i + 1] = calcMod(multiple(csumHash[i], BASE) + str[i]);
        }
    }

    ull getHash(const int begin, const int length) {
        return calcMod(csumHash[begin + length] + LLMAX - multiple(csumHash[begin], powBase[length]));
    }

    string substr(const int begin) {
        return str.substr(begin);
    }

    string substr(const int begin, const int length) {
        if(length < 0) {
            return str.substr(begin, str.size() + length - begin + 1);
        } else {
            return str.substr(begin, length);
        }
    }

private:
    ull calcMod(const ull num) {
        const ull modNum = (num & ROLMOD) + (num >> 61);
        return (modNum >= ROLMOD) ? modNum - ROLMOD : modNum;
    }

    ull multiple(const ull leftNum, const ull rightNum) {
        ull lu = leftNum >> 31;
        ull ld = leftNum & MASK31;
        ull ru = rightNum >> 31;
        ull rd = rightNum & MASK31;
        ull middleBit = ld * ru + lu * rd;
        return ((lu * ru) << 1) + ld * rd + ((middleBit & MASK30) << 31) + (middleBit >> 30);
    }

};

int main() {

    string s, t;
    cin >> s >> t;
    
    if(s.size() < t.size()) {
        return 0;
    }

    RollingHash rh1(s);
    RollingHash rh2(t);
    rh1.rollingHash();
    rh2.rollingHash();
    ull hash2 = rh2.getHash(0, t.size());

    for(int i = 0; i < s.size() - t.size() + 1; ++i) {
        ull hash1 = rh1.getHash(i, t.size());
        if(hash1 == hash2) fin(i);
    }
}




Measured memory_bytes: 20644