#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
using namespace std;
char a[1000000], b[1000000];
long long pot_szybkie(long long a, long long n, long long q) {
long long w = 1;
while (n > 0) {
if (n % 2 == 1)w = (w*a) % q;
a *= a;
n /= 2;
}
return w%q;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
int s;
scanf("%d", &s);
scanf("%s", a);
scanf("%s", b);
int dl_a = s;
int dl_b = strlen(b);
long long p = 61;
long long q = 1000000007, h = pot_szybkie(p, dl_a - 1, q) % q;
long long hasz1 = 0, hasz2 = 0;
for (int i = 0; i < dl_a; ++i) {
hasz1 = ((hasz1*p) % q + a[i]) % q;
}
hasz1 %= q;
for (int i = 0; i < dl_a; ++i) {
hasz2 = ((hasz2*p) % q + b[i]) % q;
}
hasz2 %= q;
for (int i = 0; i <= dl_b - dl_a; ++i) {
if (hasz1 == hasz2) {
int j = 0;
bool fla = 0;
while (j < dl_a) {
if (a[j] != b[i + j]) {
fla = 1;
break;
}
++j;
}
if (fla == 0)
printf("%d\n", i);
}
hasz2 = (p*(hasz2 - (b[i])*h) % q + b[i + dl_a]) % q;
if (hasz2 < 0)hasz2 += q;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjaGFyIGFbMTAwMDAwMF0sIGJbMTAwMDAwMF07CmxvbmcgbG9uZyBwb3Rfc3p5YmtpZShsb25nIGxvbmcgYSwgbG9uZyBsb25nIG4sIGxvbmcgbG9uZyBxKSB7Cglsb25nIGxvbmcgdyA9IDE7Cgl3aGlsZSAobiA+IDApIHsKCQlpZiAobiAlIDIgPT0gMSl3ID0gKHcqYSkgJSBxOwoJCWEgKj0gYTsKCQluIC89IDI7Cgl9CglyZXR1cm4gdyVxOwp9CmludCBtYWluKCkgewoJaW50IG47CglzY2FuZigiJWQiLCAmbik7Cglmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewoJCWludCBzOwoJCXNjYW5mKCIlZCIsICZzKTsKCQlzY2FuZigiJXMiLCBhKTsKCQlzY2FuZigiJXMiLCBiKTsKCQlpbnQgZGxfYSA9IHM7CgkJaW50IGRsX2IgPSBzdHJsZW4oYik7CgkJbG9uZyBsb25nIHAgPSA2MTsKCQlsb25nIGxvbmcgcSA9IDEwMDAwMDAwMDcsIGggPSBwb3Rfc3p5YmtpZShwLCBkbF9hIC0gMSwgcSkgJSBxOwoJCWxvbmcgbG9uZyBoYXN6MSA9IDAsIGhhc3oyID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8IGRsX2E7ICsraSkgewoJCQloYXN6MSA9ICgoaGFzejEqcCkgJSBxICsgYVtpXSkgJSBxOwoJCX0KCQloYXN6MSAlPSBxOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZGxfYTsgKytpKSB7CgkJCWhhc3oyID0gKChoYXN6MipwKSAlIHEgKyBiW2ldKSAlIHE7CgkJfQoJCWhhc3oyICU9IHE7CgkJZm9yIChpbnQgaSA9IDA7IGkgPD0gZGxfYiAtIGRsX2E7ICsraSkgewoJCQlpZiAoaGFzejEgPT0gaGFzejIpIHsKCQkJCWludCBqID0gMDsKCQkJCWJvb2wgZmxhID0gMDsKCQkJCXdoaWxlIChqIDwgZGxfYSkgewoJCQkJCWlmIChhW2pdICE9IGJbaSArIGpdKSB7CgkJCQkJCWZsYSA9IDE7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQkrK2o7CgkJCQl9CgkJCQlpZiAoZmxhID09IDApCgkJCQkJcHJpbnRmKCIlZFxuIiwgaSk7CgkJCX0KCQkJaGFzejIgPSAocCooaGFzejIgLSAoYltpXSkqaCkgJSBxICsgYltpICsgZGxfYV0pICUgcTsKCQkJaWYgKGhhc3oyIDwgMCloYXN6MiArPSBxOwoJCX0KCX0KCXJldHVybiAwOwp9