#include <cstdio>
#include <cstring>
#define BASE 163
#define MOD 1000000007
using namespace std;
char text[600000], pattern[600000];
long long pow[600000], ht[600000], hp[600000], ans[600000];
int main()
{
pow[0] = 1;
for (int i = 1; i <= 500000; ++i)
pow[i] = (pow[i-1] * BASE) % MOD;
int n;
while ((scanf ("%lld", &n)) != EOF)
{
memset (pattern, '\0', sizeof(pattern));
getchar();
scanf ("%s", pattern);
memset (text, '\0', sizeof(text));
getchar();
scanf ("%s", text);
hp[0] = pattern[0];
for (int i = 1; i < n; ++i)
{
hp[i] = (hp[i-1] * BASE) % MOD;
hp[i] += pattern[i];
hp[i] %= MOD;
}
int m = strlen(text);
ht[0] = text[0];
for (int i = 1; i < m; ++i)
{
ht[i] = (ht[i-1] * BASE) % MOD;
ht[i] += text[i];
ht[i] %= MOD;
}
int count = 0;
memset (ans, 0, sizeof(ans));
for (int i = 0; i <= m-n; ++i)
{
if (i == 0)
{
if (hp[n-1] == (ht[i+(n-1)]))
ans[count++] = i;
}
else
{
if (hp[n-1] == (ht[i+(n-1)] - (((ht[i-1] * pow[n])) % MOD)))
ans[count++] = i;
}
}
for (int i = 0; i < count; ++i)
printf ("%lld\n", ans[i]);
printf ("\n");
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNkZWZpbmUgQkFTRSAxNjMKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2hhciB0ZXh0WzYwMDAwMF0sIHBhdHRlcm5bNjAwMDAwXTsKbG9uZyBsb25nIHBvd1s2MDAwMDBdLCBodFs2MDAwMDBdLCBocFs2MDAwMDBdLCBhbnNbNjAwMDAwXTsKCmludCBtYWluKCkgCnsKCXBvd1swXSA9IDE7Cglmb3IgKGludCBpID0gMTsgaSA8PSA1MDAwMDA7ICsraSkKCQlwb3dbaV0gPSAocG93W2ktMV0gKiBCQVNFKSAlIE1PRDsJCglpbnQgbjsKCXdoaWxlICgoc2NhbmYgKCIlbGxkIiwgJm4pKSAhPSBFT0YpCgl7CgkJbWVtc2V0IChwYXR0ZXJuLCAnXDAnLCBzaXplb2YocGF0dGVybikpOwoJCWdldGNoYXIoKTsKCQlzY2FuZiAoIiVzIiwgcGF0dGVybik7CgkJbWVtc2V0ICh0ZXh0LCAnXDAnLCBzaXplb2YodGV4dCkpOwoJCWdldGNoYXIoKTsKCQlzY2FuZiAoIiVzIiwgdGV4dCk7CgkJaHBbMF0gPSBwYXR0ZXJuWzBdOwkKCQlmb3IgKGludCBpID0gMTsgaSA8IG47ICsraSkKCQl7CgkJCWhwW2ldID0gKGhwW2ktMV0gKiBCQVNFKSAlIE1PRDsKCQkJaHBbaV0gKz0gcGF0dGVybltpXTsKCQkJaHBbaV0gJT0gTU9EOwoJCX0KCQlpbnQgbSA9IHN0cmxlbih0ZXh0KTsKCQlodFswXSA9IHRleHRbMF07CgkJZm9yIChpbnQgaSA9IDE7IGkgPCBtOyArK2kpCgkJewoJCQlodFtpXSA9IChodFtpLTFdICogQkFTRSkgJSBNT0Q7CgkJCWh0W2ldICs9IHRleHRbaV07CgkJCWh0W2ldICU9IE1PRDsKCQl9CgkJaW50IGNvdW50ID0gMDsKCQltZW1zZXQgKGFucywgMCwgc2l6ZW9mKGFucykpOwoJCWZvciAoaW50IGkgPSAwOyBpIDw9IG0tbjsgKytpKQoJCXsKCQkJaWYgKGkgPT0gMCkKCQkJewoJCQkJaWYgKGhwW24tMV0gPT0gKGh0W2krKG4tMSldKSkKCQkJCQlhbnNbY291bnQrK10gPSBpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaWYgKGhwW24tMV0gPT0gKGh0W2krKG4tMSldIC0gKCgoaHRbaS0xXSAqIHBvd1tuXSkpICUgTU9EKSkpCgkJCQkJYW5zW2NvdW50KytdID0gaTsJCgkJCX0JCQoJCX0KCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCgkJCXByaW50ZiAoIiVsbGRcbiIsIGFuc1tpXSk7CgkJcHJpbnRmICgiXG4iKTsJCgl9CQoJcmV0dXJuIDA7Cn0=