Vivy 发现有些域名通过不同的 VPN(虚拟专用网络)访问速度更快。因此,她决定建立一个系统,自动将请求转发到不同的 VPN。
首先,她需要进行配置。
配置中包含多条规则。规则的格式为:[域名模式] [VPN 名称]。如果一个域名匹配某条规则的 [域名模式],我们就说该域名匹配这条规则,并且所有对该域名的访问都应转发到 [VPN 名称]。
为了简化配置,Vivy 决定使用两种通配符,即 * 和 #。* 和 # 都可以匹配任何由小写字母、数字、点号和连字符(-)组成的字符串。但是,域名仅在不匹配任何其他规则时,才匹配带有 # 通配符的规则。
一个域名模式是合法的,当且仅当它满足以下所有条件:
1. 域名模式由通配符、小写字母、数字、点号和连字符组成。
2. 域名模式不以点号开头,也不以点号结尾。
3. 域名模式中任意两个点号不相邻。
4. 如果存在通配符,则通配符必须位于域名模式的开头。且通配符后必须紧跟一个 .,或者后面没有任何字符。
5. 域名模式中的连字符必须位于两个小写字母之间。
一个 VPN 名称是合法的,当且仅当它满足以下所有条件: 1. VPN 名称由小写字母、数字和连字符组成。 2. VPN 名称以小写字母开头。 3. VPN 名称中的连字符必须位于两个小写字母之间。
两条规则被视为冲突,如果它们满足以下任一条件:
1. 存在一个不含通配符的域名,可以同时匹配这两条规则。例如,如果规则 A 的域名模式是 *.cn,规则 B 的域名模式是 a.cn,那么规则 A 和规则 B 冲突,因为域名 a.cn 可以同时匹配它们。
2. 其中一条规则因为另一条规则的存在而永远无法被匹配。例如,如果另一条规则是 *.cn,则 #.pku.cn 永远无法被匹配。
一条规则被视为无效,如果它满足以下任一条件: 1. 具有非法的域名模式。 2. 具有非法的 VPN 名称。 3. 与出现在它之前的某条有效规则冲突。
现在她想编写一个程序来解析这些配置,并确定有多少条规则是无效的。
此外,她还想了解更多信息。一个不含 # 通配符的有效域名模式可以代表一组域名。她想知道,给定一组域名,有多少条有效规则匹配该集合,即有多少条规则满足:存在一个不含通配符的域名属于该集合且匹配该规则。
输入格式
输入包含多组测试数据,最多 10 组。
对于每组测试数据:
第一行包含一个整数 $N$,表示规则的数量。($1 \le N \le 50000$)
接下来 $N$ 行,每行包含两个由空格分隔的字符串,分别表示规则的域名模式和 VPN 名称。
规则中字符串的总长度不超过 $1100000$。
下一行包含一个整数 $M$,表示查询的数量。($1 \le M \le 50000$)
接下来 $M$ 行,每行包含一个表示一组域名的域名模式。
对于每个查询,你需要回答有多少条有效规则匹配该集合。保证给定的域名模式是合法的,且不包含 # 通配符。
查询中字符串的总长度不超过 $1100000$。
输出格式
对于每组测试数据: 第一行包含一个整数,表示无效规则的数量。 接下来 $M$ 行,每行是一个整数,表示对应查询匹配的有效规则数量。
样例
输入 1
11 a.c a.c poj.org vpn-china www.pku.edu.cn vpn-pku1 mail.pku.edu.cn vpn-pku1 *.test.pku.edu.cn vpn-pku2 *.test.pku.edu.cn vpn-pku2 *.a.test.pku.edu.cn vpn-pku2 *.test2.pku.edu.cn vpn-pku2 *.pku.edu.cn vpn-pku2 #.pku.edu.cn vpn-pku0 #.www.pku.edu.cn vpn-pku0 5 a.c mail.pku.edu.cn *.test.pku.edu.cn *.pku.edu.cn *
输出 1
5 0 1 1 5 6
说明
总共有五条无效规则:
1. a.c a.c 无效,因为 a.c 不是合法的 VPN 名称。
2. 第二条 *.test.pku.edu.cn vpn-pku 无效,因为它与 *.test.pku.edu.cn 冲突。
3. *.a.test.pku.edu.cn vpn-pku 无效,因为它与 *.test.pku.edu.cn 冲突。
4. *.pku.edu.cn vpn-pku 无效,因为它与多条有效规则冲突。
5. #.www.pku.edu.cn vpn-pku0 无效,因为它与 #.pku.edu.cn 冲突。
对于查询:
1. a.c 不匹配任何规则。
2. mail.pku.edu.cn 不匹配 #.pku.edu.cn,因为它匹配 mail.pku.edu.cn。
3. *.test.pku.edu.cn 仅匹配 *.test.pku.edu.cn。
4. *.pku.edu.cn 可能匹配除 poj.org 之外的所有有效规则。更具体地说,*.pku.edu.cn 包含 www.pku.edu.cn、mail.pku.edu.cn、a.test.pku.edu.cn、a.test2.pku.edu.cn 和 a.pku.edu.cn。它们分别匹配 www.pku.edu.cn、mail.pku.edu.cn、*.test.pku.edu.cn、*.test2.pku.edu.cn 和 #.pku.edu.cn。
5. * 可能匹配所有有效规则。