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 翻译