问题 G: zz的一封信

内存限制:256 MB 时间限制:1 S 标准输入输出
题目类型:传统 评测方式:文本比较 上传者:
提交:17 通过:11

题目描述

zz写了一封长度为n的信。他想把它作为生日礼物送给他喜欢字符串的朋友kk。他把信写在一张神奇的纸上,但他很惊讶,因为在写信时发现有些字符消失了。那是因为这张神奇的纸不允许英文字母表中的某个字符i的连续数量超过ai。例如,如果 a1 = 2,他不能在这张纸上用长度为 3 或更大的字符串写字符“a”。允许使用字符串“aa”,而不允许使用字符串“aaa”。

zz决定信的内容拆分为一些非空的子字符串,以便他可以将每个子字符串写在独立的魔法纸上并满足条件。字符串的总长度之和为 n,并且不重叠。例如,如果a1=2并且他想发送字符串“aaa”,他可以将其拆分为“a”和“aa”并使用2张魔法纸,或者分成“a”,“a”和“a”并使用3张魔法纸。他不能将其拆分为“aa”和“aa”,因为它们的长度之和大于n。如果内容满足条件,他可以将消息拆分为单个字符串。

字符串 s 的子字符串是由字符串 s 中的一些连续字符组成的字符串,字符串 “ab”、“abc” 和 “b” 是字符串 “abc” 的子字符串,而字符串 “acb” 和 “ac” 不是。任何字符串都是自身的子字符串。

当zz在考虑如何拆分信时,kk告诉他有很多方法可以拆分它。之后,zz问了你三个问题:

1.有多少种方法可以将字符串拆分为子字符串,以便每个子字符串都满足神奇纸张的条件,它们的长度之和为 n 并且它们不重叠?计算答案对 109+7取模。

2.在某些有效拆分中可以出现的子字符串的最大长度是多少?

3.信能被拆分出来的最小子串的数量是多少?

如果拆分位置的集合不同,则两种方式被视为不同。例如,拆分“aa|a”和“a|aa”被视为消息“aaa”的不同拆分。 

输入格式

第一行包含一个整数 n (1≤n≤10^3),表示消息的长度。

第二行包含长度为 n 的消息 s,该消息由小写英文字母组成。

第三行包含 26 个整数 a1,a2,...,a26 (1≤ax≤10^3)− 每个字母可以出现的子字符串的最大长度。

输出格式

打印三行。

在第一行中打印将消息拆分为子字符串并满足问题模 10^9+7 中提到的条件的方法数量。

在第二行中,打印所有方式上最长子字符串的长度。

在第三行中,打印所有方式的最小子字符串数。



Input
3
aab
2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Output
3
2
2
Input
10
abcdeabcde
5 5 5 5 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Output
401
4
3
说明
       最长的子字符串是长度为 2 的“aa”和“ab”。
       “a|ab”或“aa|b”中的最小子字符串数为 2。
       请注意,“aab”不是可能的拆分,因为字母“a”出现在长度为 3 的子字符串中,而 a1=2。



输入样例 复制

3
aab
2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输出样例 复制

3
2
2