#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int max_node=60005;
const int son_num=130;
vector<int> se;
class ACAutomaton
{
private:
int sz;
int trie[max_node][son_num];
int val[max_node];
int fail[max_node];
public:
void init()
{
sz=0;
memset(trie,0,sizeof(trie));
memset(val,0,sizeof(val));
}
int idx(char c)
{
return c;
}
void insert(char *s,int key)
{
int u,c,n,i;
u=0;
n=strlen(s);
for(i=0;i<n;i++)
{
c=idx(s[i]);
if(!trie[u][c])trie[u][c]=++sz;
u=trie[u][c];
}
val[u]=key;
}
void query(char *T)
{
int u,c,n,i;
u=0;
n=strlen(T);
for(i=0;i<n;i++)
{
c=idx(T[i]);
u=trie[u][c];
if(val[u])count(u);
}
}
void count(int u)
{
if(val[u])
{
se.push_back(val[u]);
count(fail[u]);
}
}
void getfail()
{
int u,c,r,v;
queue<int> q;
fail[0]=0;
for(c=0;c<son_num;c++)
{
u=trie[0][c];
if(u)
{
fail[u]=0;
q.push(u);
}
}
while(!q.empty())
{
r=q.front();q.pop();
for(c=0;c<son_num;c++)
{
u=trie[r][c];
if(!u)
{
trie[r][c]=trie[fail[r]][c];
continue;
}
q.push(u);
v=fail[r];
while(v&&!trie[v][c])v=fail[v];
fail[u]=trie[v][c];
}
}
}
}ac;
char s[210];
char T[10100];
int main()
{
int n,i,j,tol;
while(scanf("%d",&n)!=EOF)
{
ac.init();
for(i=1;i<=n;i++)
{
scanf("%s",s);
ac.insert(s,i);
}
ac.getfail();
scanf("%d",&n);
tol=0;
for(i=1;i<=n;i++)
{
scanf("%s",T);
se.clear();
ac.query(T);
if(se.size())
{
tol++;
sort(se.begin(),se.end());
printf("web %d:",i);
for(j=0;j<se.size();j++)
printf(" %d",se[j]);
printf("\n");
}
}
printf("total: %d\n",tol);
}
}