时间限制: 2.5 秒
空间限制: 1024 MB
题目描述
一个序列被称为“双序列”,当且仅当这个序列具有 {x1,x2,⋯,xk,x1,x2,⋯,xk} (k≥1) 的形式。例如 {2,2,2,2}, {1,1}, {7,9,9,7,9,9} 都是双序列,而 {1}, {4,2}, {3,3,3} 就不是。
给出长度为 n 的序列 {a1,a2,⋯,an},其中所有元素都是 [1,n] 之内的正整数。
矩阵 M 是一个连接关系矩阵(Bridging Relation Matrix,BRM),这是一个 n×n 的 01 矩阵,注意矩阵的下标是从 1 开始,即左上角第一个元素是 M1,1。
接下来我们基于此定义 BRM 的子序列。一般地,长度为 m 子序列可以用 $\{a_{p_1},\cdots,a_{p_m}\}~(m\ge 1,1\le p_1<p_2<\cdots < p_m\le n)$ 表示,我们称该子序列对 M 满足 BRM 条件当且仅当:Mapi,api+1=1 对于任意的 1≤i≤m−1 都成立。
自然地,在对 M 满足 BRM 条件的子序列中,也有一部分是双序列。也就是说,我们需要寻找的子序列还要满足以下性质:
- 子序列的长度 m≡0(mod2);
- api=api+m/2 对于任意 1≤i≤m/2 成立。
试计算满足条件的子序列(满足 BRM 条件的双序列)数量,输出答案对 109+7 取模的结果。
输入格式
从标准输入读入数据。
第一行输入一个整数 n,表示数列长度。
接下来一行 n 个整数 a1,a2,⋯,an,表示数列,用空格分隔。
接下来 n 行,每行一个长度为 n 的字符串,只可能为 0 或者 1,第 i 行的第 j 个字符表示 Mi,j。
输出格式
输出到标准输出。
输出一个整数,为满足条件的子序列数量对 109+7 取模的结果。
2
1 1
01
11
0
样例 1 解释
由于 M1,1=0,子序列中唯一的双序列不满足 BRM 条件,因此答案为 0。
4
1 2 1 2
1111
1111
1111
1111
3
样例 2 解释
满足条件的子序列分别为 {a1,a3}, {a2,a4}, {a1,a2,a3,a4}。
7
1 2 1 2 2 6 6
0110111
0111011
1111111
1111111
1111111
0000010
1101011
4
样例 3 解释
满足条件的子序列分别为 {a2,a4}, {a4,a5}, {a2,a5}, {a6,a7}。
子任务
对于所有数据,保证 2≤n≤500, 1≤ai≤n。
本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。
| 子任务编号 |
分值 |
n≤ |
特殊性质 |
| 1 |
30 |
20 |
× |
| 2 |
50 |
| 3 |
20 |
500 |
✓ |
| 4 |
× |
特殊性质:Mi,j=1 对所有 1≤i,j≤n 成立。