#include<iostream>//因为好久没复习这个知识点所以强行用一下
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
#define int long long 
const int N=150;//一开始开的15,不知道怎么开小了,数组越界,只好改大点了
vector<string> Q;//记录所有字符串,方便最后打印输出
bool r[110];//开一个数组记录一下该下标处的位置是否是个人名的结尾
int tree[N][26],idx,iex;//标准trie树
int cnt[110];//记录票数
int n,m;
void creat(string s)//创建树
{
int p=0;
for(int i=0;i<s.size();i++)
{int u=s[i]-'A';
if(!tree[p][u])tree[p][u]=++idx;//没开节点就开个
p=tree[p][u];//延伸节点
}
r[p]=true;


}
bool add_c(string s)//投票,同创建
{int p=0;
for(int i=0;i<s.size();i++)
{int u=s[i]-'A';
if(!tree[p][u])return 0;//找不到
p=tree[p][u];
}
if(r[p]){cnt[p]++;return 1;}//判断是否为有效票,如果以该字母结尾的下标是个名字(也就是true)则有效
return 0;//找到了,但不以它结尾


}
void print(string &s)//打印
{int p=0;
for(int i=0;i<s.size();i++)
{int u=s[i]-'A';p=tree[p][u];

}cout<<s<<' '<<':'<<' '<<cnt[p]<<endl;

}
signed main()
{cin>>n;
for(int i=0;i<n;i++)
{string s;
cin>>s;Q.push_back(s);
creat(s);


}cin>>m;int IN=0;
for(int i=0;i<m;i++)
{string s;
cin>>s;
bool flag=add_c(s);
if(!flag)IN++;

}
for(int i=0;i<Q.size();i++)
{print(Q[i]);

}cout<<"Invalid : "<<IN<<endl;

return 0;

}