CFCF2201C.Rigged Bracket Sequence

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

一个“正规括号序列”是仅由 “(” 和 “)” 组成的序列,可以通过在该序列中随意插入 11++ 变成合法的数学表达式。例如,序列“()(()())”是一个正规括号序列,而“())(()”或“(()”都不是正规括号序列。

现在给你一个正规括号序列 SS

我们定义右移一个子序列。具体地,若将子序列 Si1Si2SikS_{i_1} S_{i_2} \ldots S_{i_k} 右移,则这些被选中位置上的字符会被同时重新赋值如下:

  • Si1SikS_{i_1} \leftarrow S_{i_k}
  • Si2Si1S_{i_2} \leftarrow S_{i_1}
  • Si3Si2S_{i_3} \leftarrow S_{i_2}
  • \ldots
  • SikSik1S_{i_k} \leftarrow S_{i_{k-1}}

换句话说,第 jj 个被选中的位置被赋值为第 ((j2)modk+1)((j-2) \bmod k + 1) 个被选中的字符。

例如,对于 SS 为 “()(()())”,若右移子序列 S2S4S_2 S_4SS 会变为 “((())())”;若右移 S2S3S5S_2 S_3 S_5,则 SS 会变为 “())((())”。

请你统计,有多少个非空子序列,在右移后会使 SS 仍然保持为一个正规括号序列。由于答案可能非常大,只需输出答案对 998244353998\,244\,353 取模的结果。

^{\ast} 序列 aa 是序列 bb 的子序列,若 aa 可以通过从 bb 中删除任意(可能为 0 个或全部)若干个元素后得到。如果所删除元素的位置不同,则认为是不同的子序列。

输入格式

每组测试数据包含多组用例。第一行包含测试用例的数量 tt1t1041 \le t \le 10^4)。
每组用例第一行为一个正偶整数 nn2n3000002 \le n \le 300\,000)。
第二行为一个长度为 nn 的正规括号序列 SS,作为一个没有空格的字符串。

保证所有测试用例的 nn 之和不超过 300000300\,000

输出格式

对于每组测试用例,输出一个答案,每个答案占一行,对 998244353998\,244\,353 取模。

输入输出样例

  • 输入#1

    4
    2
    ()
    4
    ()()
    6
    (()())
    10
    ()((())())

    输出#1

    2
    8
    28
    312

说明/提示

对于第二个测试用例,能使 SS 右移后仍然是正规括号序列的非空子序列共有 88 个:

  • S1S_1SS 变为 "()()";
  • S2S_2SS 变为 "()()";
  • S3S_3SS 变为 "()()";
  • S4S_4SS 变为 "()()";
  • S1S3S_1 S_3SS 变为 "()()";
  • S2S3S_2 S_3SS 变为 "(())";
  • S2S4S_2 S_4SS 变为 "()()";
  • S1S2S3S_1 S_2 S_3SS 变为 "(())"。
首页