#include<bits/stdc++.h>
#define fr(i,a,b) for(int i=a;i<b;i++)
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define f(i,n) for(int i=0;i<n;i++)
#define ll long long
using namespace std;
ll power(ll x,ll y, ll mod){
ll res = 1LL;
while(y>0){
if(y&1)
res = (res*x)%mod;
y = y/2;
res = (res*power(x,y,mod))%mod;
}
return res;
}
void test(){
int n;
cin>>n;
string s,pat;
cin>>pat>>s;
int p = 31;
ll m1 = 1e9 + 7;
ll m2 = 1e9 + 9;
ll hash[s.length()+1];
ll hash2[s.length()+1];
hash[0] = 0;
hash2[0] = 0;
f(i,s.length()){
hash[i+1] = (hash[i] + (s[i]-'a')*power(p,i,m1))%m1;
hash2[i+1] = (hash2[i] + (s[i]-'a')*power(p,i,m2))%m2;
}
ll hashv = 0,hashv2 = 0;
f(i,n){
hashv = (hashv + (pat[i]-'a')*power(p,i,m1))%m1;
hashv2 = (hashv2 + (pat[i]-'a')*power(p,i,m2))%m2;
}
vector<int> ans;
for(int i=0;i+n-1<s.length();i++){
ll cur = (hash[i+n]-hash[i]+m1)%m1;
ll comp = (hashv*power(p,i,m1))%m1;
ll cur2 = (hash2[i+n]-hash2[i]+m2)%m2;
ll comp2 = (hashv2*power(p,i,m2))%m2;
if(cur==comp and cur2==comp2){
ans.pb(i);
}
}
f(i,ans.size())cout<<ans[i]<<"\n";
if(ans.size()==0)cout<<"\n";
}
int main(){
int t=1;
cin>>t;
while(t--){
test();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmcihpLGEsYikgZm9yKGludCBpPWE7aTxiO2krKykgCiNkZWZpbmUgbXAgbWFrZV9wYWlyIAojZGVmaW5lIHBiIHB1c2hfYmFjayAKI2RlZmluZSBGIGZpcnN0IAojZGVmaW5lIFMgc2Vjb25kIAojZGVmaW5lIGYoaSxuKSBmb3IoaW50IGk9MDtpPG47aSsrKSAKI2RlZmluZSBsbCBsb25nIGxvbmcgCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgcG93ZXIobGwgeCxsbCB5LCBsbCBtb2QpewoJbGwgcmVzID0gMUxMOwoJd2hpbGUoeT4wKXsKCQlpZih5JjEpCgkJCXJlcyA9IChyZXMqeCklbW9kOwoJCXkgPSB5LzI7CgkJcmVzID0gKHJlcypwb3dlcih4LHksbW9kKSklbW9kOwoJfQoJcmV0dXJuIHJlczsKfQoKdm9pZCB0ZXN0KCl7CglpbnQgbjsKCWNpbj4+bjsKCXN0cmluZyBzLHBhdDsKCWNpbj4+cGF0Pj5zOwoJaW50IHAgPSAzMTsKCWxsIG0xID0gMWU5ICsgNzsKCWxsIG0yID0gMWU5ICsgOTsKCWxsIGhhc2hbcy5sZW5ndGgoKSsxXTsKCWxsIGhhc2gyW3MubGVuZ3RoKCkrMV07CgloYXNoWzBdID0gMDsKCWhhc2gyWzBdID0gMDsKCWYoaSxzLmxlbmd0aCgpKXsKCQloYXNoW2krMV0gPSAoaGFzaFtpXSArIChzW2ldLSdhJykqcG93ZXIocCxpLG0xKSklbTE7CgkJaGFzaDJbaSsxXSA9IChoYXNoMltpXSArIChzW2ldLSdhJykqcG93ZXIocCxpLG0yKSklbTI7Cgl9CglsbCBoYXNodiA9IDAsaGFzaHYyID0gMDsKCWYoaSxuKXsKCQloYXNodiA9IChoYXNodiArIChwYXRbaV0tJ2EnKSpwb3dlcihwLGksbTEpKSVtMTsKCQloYXNodjIgPSAoaGFzaHYyICsgKHBhdFtpXS0nYScpKnBvd2VyKHAsaSxtMikpJW0yOwoJfQoJCgl2ZWN0b3I8aW50PiBhbnM7Cglmb3IoaW50IGk9MDtpK24tMTxzLmxlbmd0aCgpO2krKyl7CgkJbGwgY3VyID0gKGhhc2hbaStuXS1oYXNoW2ldK20xKSVtMTsKCQlsbCBjb21wID0gKGhhc2h2KnBvd2VyKHAsaSxtMSkpJW0xOwoJCWxsIGN1cjIgPSAoaGFzaDJbaStuXS1oYXNoMltpXSttMiklbTI7CgkJbGwgY29tcDIgPSAoaGFzaHYyKnBvd2VyKHAsaSxtMikpJW0yOwoJCWlmKGN1cj09Y29tcCBhbmQgY3VyMj09Y29tcDIpewoJCQlhbnMucGIoaSk7CgkJfQoJfQoJZihpLGFucy5zaXplKCkpY291dDw8YW5zW2ldPDwiXG4iOwoJaWYoYW5zLnNpemUoKT09MCljb3V0PDwiXG4iOwp9CgppbnQgbWFpbigpewoJaW50IHQ9MTsKCWNpbj4+dDsKCXdoaWxlKHQtLSl7CgkJdGVzdCgpOwoJfQp9