/// vn.spoj.com/problems/SUBSTR/
/// hash str by muoii
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 0
#define maxc 0
#define len 31
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/// HASH:
struct strig{
int n;
string s;
long long base,modul;
long long hashall;
vector<int> HASH;
vector<int> pow;
strig(const string &str,const long long &bse,const long long &modulo): n(str.size()), s("$"+str), base(bse), modul(modulo), hashall(-1), HASH(0), pow(0) {};
void calcall(){
hashall=0;
for(int i=1;i<=n;i++)
hashall=(hashall*base + s[i]-'a'+1)%modul;
}
void calcvec(){
HASH.resize(n+1);
pow.resize(n+1);
HASH[0]=0;pow[0]=1;
for(int i=1;i<=n;i++)
{
pow[i]=(pow[i-1]*base)%modul;
HASH[i]=(HASH[i-1]*base + s[i]-'a'+1)%modul;
}
}
long long gethash(const int &l,const int &r)
{
return (HASH[r] - HASH[l-1]*pow[r-l+1] + modul*modul)%modul;
}
};
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
long long base =31,modulo=1000000003LL;
int m,n;
string str;
cin>>str;
strig a(str,base,modulo);
cin>>str;
strig b(str,base,modulo);
a.calcvec();
b.calcall();
for(int i=1;i+b.n-1<=a.n;i++)
if(a.gethash(i,i+b.n-1)==b.hashall)
cout<<i<<" ";
return 0;
}
Ly8vIHZuLnNwb2ouY29tL3Byb2JsZW1zL1NVQlNUUi8KCi8vLyBoYXNoIHN0ciBieSBtdW9paQoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdGFnICJzcG9qIgojZGVmaW5lIG1heG4gMAojZGVmaW5lIG1heGMgMAojZGVmaW5lIGxlbiAzMQojZGVmaW5lIG9vIDEwMDAwMDAwMDcKI2RlZmluZSBtaWQgKChsK3IpPj4xKQojZGVmaW5lIG1lc2V0KGEseCkgbWVtc2V0KGEseCxzaXplb2YoYSkpCiNkZWZpbmUgbG9vcCh4KSBmb3IoaW50IExvT3BFcj14O0xvT3BFci0tPjA7KQovLy8+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ci8vLyBIQVNIOgogCnN0cnVjdCBzdHJpZ3sKICAgIGludCBuOwogICAgc3RyaW5nIHM7CiAgICBsb25nIGxvbmcgYmFzZSxtb2R1bDsKICAgIGxvbmcgbG9uZyBoYXNoYWxsOwogICAgdmVjdG9yPGludD4gSEFTSDsKICAgIHZlY3RvcjxpbnQ+IHBvdzsKIAogICAgc3RyaWcoY29uc3Qgc3RyaW5nICZzdHIsY29uc3QgbG9uZyBsb25nICZic2UsY29uc3QgbG9uZyBsb25nICZtb2R1bG8pOiBuKHN0ci5zaXplKCkpLCBzKCIkIitzdHIpLCBiYXNlKGJzZSksIG1vZHVsKG1vZHVsbyksIGhhc2hhbGwoLTEpLCBIQVNIKDApLCBwb3coMCkge307CiAgICB2b2lkIGNhbGNhbGwoKXsKICAgICAgICBoYXNoYWxsPTA7CiAKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgICAgICAgICAgaGFzaGFsbD0oaGFzaGFsbCpiYXNlICsgc1tpXS0nYScrMSklbW9kdWw7CiAgICB9CiAKICAgIHZvaWQgY2FsY3ZlYygpewogICAgICAgIEhBU0gucmVzaXplKG4rMSk7CiAgICAgICAgcG93LnJlc2l6ZShuKzEpOwogICAgICAgIEhBU0hbMF09MDtwb3dbMF09MTsKIAogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgcG93W2ldPShwb3dbaS0xXSpiYXNlKSVtb2R1bDsKICAgICAgICAgICAgSEFTSFtpXT0oSEFTSFtpLTFdKmJhc2UgKyBzW2ldLSdhJysxKSVtb2R1bDsKICAgICAgICB9CiAgICB9CiAKICAgIGxvbmcgbG9uZyBnZXRoYXNoKGNvbnN0IGludCAmbCxjb25zdCBpbnQgJnIpCiAgICB7CiAgICAgICAgcmV0dXJuIChIQVNIW3JdIC0gSEFTSFtsLTFdKnBvd1tyLWwrMV0gKyBtb2R1bCptb2R1bCklbW9kdWw7CiAgICB9Cn07CmludCBtYWluKCkKewogICAgI2lmZGVmIGRtZGQKICAgIGZyZW9wZW4odGFnIi5pbnAiLCJyIixzdGRpbik7IGZyZW9wZW4odGFnIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgI2VuZGlmIC8vIGRtZGQKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKIAogICAgbG9uZyBsb25nIGJhc2UgPTMxLG1vZHVsbz0xMDAwMDAwMDAzTEw7CiAKICAgIGludCBtLG47CiAgICBzdHJpbmcgc3RyOwogCiAgICBjaW4+PnN0cjsKICAgIHN0cmlnIGEoc3RyLGJhc2UsbW9kdWxvKTsKIAogICAgY2luPj5zdHI7CiAgICBzdHJpZyBiKHN0cixiYXNlLG1vZHVsbyk7CiAKICAgIGEuY2FsY3ZlYygpOwogICAgYi5jYWxjYWxsKCk7CiAKICAgIGZvcihpbnQgaT0xO2krYi5uLTE8PWEubjtpKyspCiAgICAgICAgaWYoYS5nZXRoYXNoKGksaStiLm4tMSk9PWIuaGFzaGFsbCkKICAgICAgICAgICAgY291dDw8aTw8IiAiOwogCiAgICByZXR1cm4gMDsKfQ==