CF1015F Bracket Substring

题目描述

给定一个括号序列 $s$(不一定是合法括号序列)。括号序列是仅包含字符 '(' 和 ')' 的字符串。 一个合法括号序列是指可以通过在原序列的字符之间插入字符 '1' 和 '+',将其转化为正确的算术表达式的括号序列。例如,括号序列 "()()" 和 "(())" 是合法的(对应的表达式分别为 "(1)+(1)" 和 "((1+1)+1)"),而 ")(", "(" 和 ")" 都不是合法括号序列。 你的任务是计算长度为 $2n$ 的所有合法括号序列中,包含给定括号序列 $s$ 作为子串(即连续字符序列)的个数。由于答案可能很大,请对 $10^9+7$($1000000007$)取模后输出。

输入格式

输入的第一行包含一个整数 $n$($1 \le n \le 100$),表示最终合法括号序列的一半长度(即最终序列长度为 $2n$)。 输入的第二行包含一个字符串 $s$($1 \le |s| \le 200$),表示必须作为子串出现的括号序列($|s|$ 表示 $s$ 的长度)。

输出格式

输出一个整数,表示包含给定括号序列 $s$ 作为子串的长度为 $2n$ 的合法括号序列的数量。由于答案可能很大,请输出其对 $10^9+7$($1000000007$)取模后的结果。

说明/提示

对于第一个样例,满足条件的所有合法括号序列为: - "(((()))())" - "((()()))()" - "((()))()()" - "(()(()))()" - "()((()))()" 对于第二个样例,满足条件的所有合法括号序列为: - "((()))" - "(()())" - "(())()" - "()(())" 对于第三个样例,长度为 $4$ 的合法括号序列中没有包含 "(((" 作为子串的情况。 由 ChatGPT 4.1 翻译