#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
struct node{
map<char,int> nxt;
int link = 0;
vector<int> out;
};
void add(const string &s, int id, vector<node> &t){
int v = 0;
for(int i = 0; i < s.size(); i++){
char c = s[i];
if(!t[v].nxt.count(c)){
t[v].nxt[c] = t.size();
t.emplace_back();
}
v = t[v].nxt[c];
}
t[v].out.push_back(id);
}
void build(vector<node> &t){
queue<int> q;
for (auto &p : t[0].nxt) {
t[p.second].link = 0;
q.push(p.second);
}
while (!q.empty()) {
int v = q.front(); q.pop();
for (auto &p : t[v].nxt) {
char c = p.first;
int u = p.second;
int j = t[v].link;
while (j && !t[j].nxt.count(c))
j = t[j].link;
if (t[j].nxt.count(c))
j = t[j].nxt[c];
t[u].link = j;
for (int x : t[j].out)
t[u].out.push_back(x);
q.push(u);
}
}
}
void search(const string &s, const vector<int> &L, vector<vector<int>> &res, vector<node> &t){
int v = 0;
for(int i = 0; i < s.size(); i++){
char c = s[i];
while(v && !t[v].nxt.count(c)) v = t[v].link;
if(t[v].nxt.count(c)) v = t[v].nxt[c];
for(int id : t[v].out) res[id].push_back(i - L[id] + 1);
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;
while(cin >> n){
string tmp; getline(cin, tmp);
vector<string> P(n);
for(int i = 0; i < n; i++)getline(cin, P[i]);
string T; getline(cin, T);
vector<node> t;
t.emplace_back();
vector<int> L(n);
for(int i = 0; i < n; i++){
L[i] = P[i].size();
add(P[i], i, t);
}
build(t);
vector<vector<int>> occ(n);
search(T,L,occ,t);
for(int i = 0; i < n; i++){
for(int j = 0; j < occ[i].size(); j++){
if(j)cout << ' ';
cout << occ[i][j];
}
cout << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgIlxuIgoKc3RydWN0IG5vZGV7CgltYXA8Y2hhcixpbnQ+IG54dDsKCWludCBsaW5rID0gMDsKCXZlY3RvcjxpbnQ+IG91dDsKfTsKCnZvaWQgYWRkKGNvbnN0IHN0cmluZyAmcywgaW50IGlkLCB2ZWN0b3I8bm9kZT4gJnQpewoJaW50IHYgPSAwOwoJZm9yKGludCBpID0gMDsgaSA8IHMuc2l6ZSgpOyBpKyspewoJCWNoYXIgYyA9IHNbaV07CgkJaWYoIXRbdl0ubnh0LmNvdW50KGMpKXsKCQkJdFt2XS5ueHRbY10gPSB0LnNpemUoKTsKCQkJdC5lbXBsYWNlX2JhY2soKTsKCQl9CgkJdiA9IHRbdl0ubnh0W2NdOwoJfQoJdFt2XS5vdXQucHVzaF9iYWNrKGlkKTsKfQoKdm9pZCBidWlsZCh2ZWN0b3I8bm9kZT4gJnQpewoJcXVldWU8aW50PiBxOwoJZm9yIChhdXRvICZwIDogdFswXS5ueHQpIHsKCSAgICB0W3Auc2Vjb25kXS5saW5rID0gMDsKCSAgICBxLnB1c2gocC5zZWNvbmQpOwoJfQoJd2hpbGUgKCFxLmVtcHR5KCkpIHsKCSAgICBpbnQgdiA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKCSAgICBmb3IgKGF1dG8gJnAgOiB0W3ZdLm54dCkgewoJICAgICAgICBjaGFyIGMgPSBwLmZpcnN0OwoJICAgICAgICBpbnQgdSA9IHAuc2Vjb25kOwoJICAgICAgICBpbnQgaiA9IHRbdl0ubGluazsKCSAgICAgICAgd2hpbGUgKGogJiYgIXRbal0ubnh0LmNvdW50KGMpKQoJICAgICAgICAgICAgaiA9IHRbal0ubGluazsKCSAgICAgICAgaWYgKHRbal0ubnh0LmNvdW50KGMpKQoJICAgICAgICAgICAgaiA9IHRbal0ubnh0W2NdOwoJICAgICAgICB0W3VdLmxpbmsgPSBqOwoJICAgICAgICBmb3IgKGludCB4IDogdFtqXS5vdXQpCgkgICAgICAgICAgICB0W3VdLm91dC5wdXNoX2JhY2soeCk7CgkgICAgICAgIHEucHVzaCh1KTsKCSAgICB9Cgl9Cn0KCnZvaWQgc2VhcmNoKGNvbnN0IHN0cmluZyAmcywgY29uc3QgdmVjdG9yPGludD4gJkwsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJnJlcywgdmVjdG9yPG5vZGU+ICZ0KXsKCWludCB2ID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSsrKXsKCQljaGFyIGMgPSBzW2ldOwoJCXdoaWxlKHYgJiYgIXRbdl0ubnh0LmNvdW50KGMpKSB2ID0gdFt2XS5saW5rOwoJCWlmKHRbdl0ubnh0LmNvdW50KGMpKSB2ID0gdFt2XS5ueHRbY107CgkJZm9yKGludCBpZCA6IHRbdl0ub3V0KSByZXNbaWRdLnB1c2hfYmFjayhpIC0gTFtpZF0gKyAxKTsKCX0JCn0KCnNpZ25lZCBtYWluKCl7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCWludCBuOwoJd2hpbGUoY2luID4+IG4pewoJCXN0cmluZyB0bXA7IGdldGxpbmUoY2luLCB0bXApOwoJCXZlY3RvcjxzdHJpbmc+IFAobik7CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKylnZXRsaW5lKGNpbiwgUFtpXSk7CgkJc3RyaW5nIFQ7IGdldGxpbmUoY2luLCBUKTsKCQl2ZWN0b3I8bm9kZT4gdDsKCQl0LmVtcGxhY2VfYmFjaygpOwoJCXZlY3RvcjxpbnQ+IEwobik7CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJCUxbaV0gPSBQW2ldLnNpemUoKTsKCQkJYWRkKFBbaV0sIGksIHQpOwoJCX0KCQlidWlsZCh0KTsKCQl2ZWN0b3I8dmVjdG9yPGludD4+IG9jYyhuKTsKCQlzZWFyY2goVCxMLG9jYyx0KTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKCQkJZm9yKGludCBqID0gMDsgaiA8IG9jY1tpXS5zaXplKCk7IGorKyl7CgkJCQlpZihqKWNvdXQgPDwgJyAnOwoJCQkJY291dCA8PCBvY2NbaV1bal07CgkJCX0KCQkJY291dCA8PCBlbmRsOwoJCX0KCX0KCXJldHVybiAwOwp9Cg==