小 Matej 正在做面向对象程序设计(OOP)的实验课练习,他在解决其中一个子任务时遇到了困难。
给他一个包含 $N$ 个单词的集合。同时还给他 $Q$ 个查询,每个查询是一个模式串。模式串由单个字符 * 和英文小写字母组成。例如:*、kul*to、ana*。
如果存在一个字母序列(可以为空),使得将字符 * 替换为该序列后,模式串与该单词完全相同,则称该模式串覆盖了该单词。你需要输出每个模式串覆盖了多少个单词。
输入格式
第一行包含两个整数 $N$ 和 $Q$($1 \le N, Q \le 100\,000$)。
接下来的 $N$ 行,每行包含一个由英文小写字母组成的单词。
接下来的 $Q$ 行,每行包含一个模式串,你需要输出第一个集合中有多少个单词被该模式串覆盖。
所有单词和模式串的总字符数将小于 $3\,000\,000$。
输出格式
输出 $Q$ 行,第 $k$ 行包含第 $k$ 个模式串覆盖的单词数量。
子任务
在占总分 $40\%$ 的测试数据中,额外满足 $1 \le N, Q \le 1000$。
样例
输入 1
3 3 aaa abc aba a*a aaa* *aaa
输出 1
2 1 1
输入 2
5 3 eedecc ebdecb eaba ebcddc eb e* *dca e*c
输出 2
5 0 2