孙神的kali难题
题号:NC206140
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Hacker魂熊熊燃起着的孙老师正得心应手地在kali炫酷的终端下如云流水地敲击着键盘。伴随着一声清脆的回车敲落,终端上文字疯狂地滚动输出,忽而截止。孙老师的嘴角不禁微微上扬:“就度盘这区区4位分享码还想挡住我的脚步?” 下载完成的,是刚从暗网流出的0day漏洞利用工具,拥有了它,足以威胁到半个世界的服务器安全。

迫不及待地解压之后却只发现一大堆数不清的zip压缩包,和一个readme.txt ,里面写着——恭喜您……(省略几百字)只可惜,还差几步才能使用

若想得到密钥你有两个选择 1. 支付10比特币 2. 看来很擅长破译密码?证明你的实力吧——接着便是输入样例里一堆奇怪的数字。

经过孙老师观察推测,形式应该是这样的:

使用正则表达式定义数字字符串都不陌生吧。通常,使用以下形式:

(1|0|7) (5|6) (2) (4|5)

上面的正则表达式匹配4位数字:第一个是1,0和7中的一个。第二个是5和6中的一个。第三个是2。第四个是4和5中的一个。上面的正则表达式可以成功地与0525匹配,但是不能与8634匹配。

现在,给你一个与上面的公式类似的正则表达式,以及一超长串数字,按顺序输出长串中所有可与正则表达式匹配的所有子串。 那便是所有子压缩包的对应的密码喔。字符串的长度不超过5 * 10 ^ 6。

你能帮帮孙老师吗?

输入描述:

多组输入。每组数据第一行是正整数N(1≤N≤1000),代表N位字符串的正则表示。

接下来N行中,第 i 行 的第一个数 ,表示第 i 行有  个数可供候选。这一行接下来会出现这  个数。

每组数据最后一行有一个由纯数字组成的字符串,长度不超过

输出描述:

输出所有可以由给定正则表达式匹配的所有子串,每个子串占一行,没有则不用输出。

示例1

输入

复制
4
3 0 7 9
2 5 7
2 2 5
2 4 5
07755420524

3
3 2 7 8
2 6 5
2 1 7
108578323872614637275712399877362781723

输出

复制
Case #1:
7755
7554
0524
Case #2:
857
261
757