#include<bits/stdc++.h>
using namespace std;
int n,m,l;
bitset<500001> book[1001];//求是否有单词在i点结尾
int ch[500000][30];//把所有单词做成一棵树
int tot=1;
string s;
string word;
void Insert(string s,int N)
{
int len=s.size();
int p=1;//起点
for(int i=0;i<len;i++)
{
int q=s[i]-'a';//求q&&p
if(!ch[p][q])
{
ch[p][q]=++tot;//多推一个点进去 ;
}
p=ch[p][q];//跳转
}
book[N][p]=1;//标记终点,以及是第几篇文章
}
void find(string word)//s为要查找的字符串
{
int len=word.size();
int p=1;
bool flag=0;
for(int i=0;i<len;i++)
{
int q=word[i]-'a';
if(!ch[p][q])
{
flag=1;
break;;//单词没有出现,直接跳出
}
p=ch[p][q];//继续向下查找单词
}
//扫描完了
if(!flag)//如果可能有这个单词
{
for(int i=1;i<=n;i++)
{
if(book[i][p])//如果单词在某个文章中出现了
{
cout<<i<<" ";//打印编号
}
}
cout<<endl;
}
}
int main() {
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>l;
for(int j=1;j<=l;j++)
{
cin>>s;
Insert(s,i);//表明是第几篇文章的单词
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>word;
find(word);//打印;
}
return 0;
}
求救,实在搞不动了,全WA,但样例这个鬼东西过了,帮忙看看