#CF3736. 字符串移动

字符串移动

题目描述

问题描述:光头强找到了字符串 ss 和排列 pp。它们的长度相同且均为 nn。在一次操作中,他可以使用 ppss 相乘,从而将 ss 替换为一个新的字符串,其中对于从 11nn 的任何 ii,都满足 newi=spinew_i=s_{p_i}。例如,对于 s=wmbes=wmbep=[3,1,4,2]p=[3,1,4,2],操作后字符串将变为 s=s3s1s4s2=bwems=s_3s_1s_4s_2=bwem。光头强想知道字符串变成其初始值的次数。因为可能需要很长时间,所以他请求您的帮助。它可以被证明所需的操作数始终存在。它可能非常大,因此请使用 6464 位整数类型。

输入格式

输入的第一行包含一个整数 t(1t5000)t(1≤t≤5000) — 输入中测试用例的数量。

每个测试用例的第一行包含一个整数 n(1n200)n(1≤n≤200) — 字符串和排列的长度。

每个测试用例的第二行包含一个长度为 nn 的字符串 ss,其中包含小写拉丁字母。

每个测试用例的第三行包含 nn 个整数 — 排列 pp (1pin)(1≤p_i≤n),所有 pip_i 都是不同的。

输出格式

输出 tt 行,每行包含输入中相应测试用例的答案。作为答案输出单个整数 — 经过多少次操作后,字符串 ss 将恢复为操作前的状态。

测试样例

3
5
ababa
3 4 5 2 1
5
ababa
2 1 4 5 3
10
codeforces
8 6 1 7 5 2 9 3 10 4
1
6
12

样例说明

在第一个样例中,操作不会改变字符串,因此它将在一次操作后恢复为原来的样子。

在第二个样例中,字符串将按以下方式更改:

s=babaas= babaa

s=abaabs = abaab

s=baabas = baaba

s=abbaas = abbaa

s=baaabs = baaab

s=ababas = ababa