#CSP1115. 量子隧穿问题(experiment)

    ID: 4547 Type: Default File IO: experiment 6000ms 1024MiB Tried: 4 Accepted: 0 Difficulty: 10 Uploaded By: Tags>CSP-S模拟暑期集训

量子隧穿问题(experiment)

题目描述

1935 年的秋天,薛定谔邀请巴甫洛夫观看他在盒子里对猫的实验。巴甫洛夫带着他的狗来了。

薛定谔有 nn 个盒子摆成一排。有些盒子肯定包含猫,有些盒子肯定不包含猫,有些盒子可能包含也可能不包含猫。每个盒子只够容纳一只猫。每个盒子 ii 有一个单向隧道 ibii \to b_i。如果盒子 bib_i 为空,盒子 ii 的猫可以移动到盒子 bib_i

当一个不速之客按响门铃时,巴甫洛夫的狗立即兴奋起来,开始奔跑和吠叫。狗从盒子 11 开始,奔向盒子 nn,依次从每个盒子旁边经过。当狗经过一个装有猫的盒子旁边时,那个盒子里的猫会受到惊吓。受惊的猫会检查该盒子的隧道,如果隧道的目标盒子是空的,则用隧道来逃跑,否则猫会留在其当前盒子里。注意,如果同一只猫移动到狗之后将要到达的盒子中,它可能会受到不止一次的惊吓。

设有 kk 个未知的盒子,求 2k2^k 种每个盒子是否包含猫的初始配置中,有多少种将导致最终最后一个盒子中有一只猫。

输入格式

experiment.in 文件读入数据。

第一行一个整数 TT,表示数据组数。

接下来 TT 组数据,每组数据格式如下:

  • 第一行一个整数 nn
  • 第二行一个长为 nn 的字符串 ss,只包含字符 C.?\texttt{C.?}。若 sis_iC\texttt{C} 则盒子 ii 包含猫,若 sis_i.\texttt{.} 则盒子 ii 不包含猫,若 sis_i?\texttt{?} 则盒子 ii 可能包含也可能不包含猫。
  • 第三行 nn 个整数 b1,b2,,bnb_1, b_2, \cdots, b_n。保证 1bin1 \leq b_i \leq nbiib_i \neq i

输出格式

输出到 experiment.out 文件。

TT 行,每行一个整数,表示该组数据的答案对 109+710^9 + 7 取模的值。

样例

6
4
??.C
2 3 1 3
4
????
2 3 1 3
6
?.????
6 6 6 6 6 5
10
????????CC
2 3 4 5 6 7 8 9 10 9
10
C???.?C.??
9 1 8 3 9 3 5 3 1 9
10
??????????
7 10 1 6 2 2 8 3 5 1
1
2
15
256
24
480

说明/提示

对于所有数据,保证 1T1234,2n50001 \leq T \leq 1234, 2 \leq n \leq 5000

子任务编号 nn \leq 特殊性质 分值
11 55 55
22 100100 bi[i5,i+5]b_i \in [i - 5, i + 5] 1515
33 2020
44 50005000 bi=(imodn)+1b_i = (i \bmod n) + 1 1515
55 1i<n,bi>i\forall 1 \leq i < n, b_i > ibn=n1b_n = n - 1
66 ss 的所有字符均为 ?\texttt{?} 2020
77 1010