题目名称 4064. [JSOI2009] 密码
输入输出 password.in/out
难度等级 ★★★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarsyzhaoss 于2024-11-21加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:0, 提交:0, 通过率:0%
关于 密码 的近10条评论(全部评论)

4064. [JSOI2009] 密码

★★★☆   输入文件:password.in   输出文件:password.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

众所周知,密码在信息领域起到了不可估量的作用。对于普通的登陆口令以,唯一的破解方法就是暴力破解——逐个尝试所有可能的字母组合,但这是一项很耗时又容易被发现的工作。所以,为了获取对方的登陆口令,在暴力破解密码之前,必须先做大量的准备工作。经过情报的搜集,现在得到了若干有用信息,形如:

“我观察到,密码中含有字符串*。”

例如,对于一个 $10$ 位的密码以及观察到的字符串 `hello` 与 `world`,可能的密码组合为 `helloworld`与 `worldhello`;而对于 $6$ 位的密码以及到的字符串 `good` 与 `day`,可能的密码组合为 `gooday`。

有了这些信息,就能够大大地减少尝试的次数了。请编一个程序,计算所有密码组合的可能。密码中仅可能包含 `a-z` 之间的小写字母。

【输入格式】

输入数据首先输入两个整数 $L,N$,分别表示密码的长度与观察到子串的个数。

接下来 $N$ 行,每行若干个字符,描述了每个观察到的字符串。

【输出格式】

输出数据第一行为一个整数,代表了满足所有观察条件字符串的总数。

若这个数字小于等于 $42$,则按字典顺序输出所有密码的可能情况,每行一个,否则,只输出满足所有观察条件字符串的总数即可。

【样例输入】

10 2
hello
world

【样例输出】

2
helloworld
worldhello

【数据范围】

对于 $100\%$ 的数据,$1\leq L\leq 25,1\leq N\leq 10$,每个观察到的字符串长不超过 $10$,并且保证输出结果小于 $2^{63}$。