#include <bits/stdc++.h>
#define BAR cout<<"*******\n";
#define fst first
#define snd second
#define INFILE(x) freopen(x,"r",stdin)
#define OUTFILE(x) freopen(x,"w",stdout)
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
using ul = unsigned long long;
using ui = unsigned int;
using db = double;
using pii = pair<int, int>;
using pil = pair<int, ll>;
using pll = pair<ll, ll>;
const int max_size = 5e5 + 10;
struct trie {
int nodes[max_size][26],t=0;
set<int> end[max_size];
void insert(const string &s,int k) {
int p=0;
for(char c: s){
int i=c-'a';
if(!nodes[p][i])nodes[p][i]=++t;
p=nodes[p][i];
}
end[p].insert(k);
}
set<int>* query(const string &s){
int p=0;
for(char c: s){
int i=c-'a';
p=nodes[p][i];
if(!p) return nullptr;
}
return &end[p];
}
} trie1;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n;
for(int i=1;i<=n;++i){
int q;
cin>>q;
for(int j=1;j<=q;++j){
string s;
cin>>s;
trie1.insert(s,i);
}
}
cin>>m;
for(int i=1;i<=m;++i){
string s;
cin>>s;
set<int> *set1=trie1.query(s);
if(set1 == nullptr){
cout<<'\n';
continue;
}
int q=1;
for(int j:*set1){
if(q^set1->size()){
cout<<j<<' ';
}else cout<<j<<'\n';
++q;
}
}
return 0;
}