CF629C Famil Door and Brackets

题目描述

随着 Famil Door 的生日即将到来,他的一些朋友(如 Gabi)决定为他买一份礼物。他的朋友们打算买一个由圆括号组成的字符串,因为 Famil Door 特别喜欢长度为 $n$ 的括号字符串! 一个圆括号序列被称为“合法”,当且仅当: 1. 左括号的总数等于右括号的总数; 2. 对于序列的任意前缀,左括号的数量都大于等于右括号的数量。 Gabi 买了一个长度为 $m$($m\leq n$)的字符串 $s$,并希望将它补全,使其成为一个长度为 $n$ 的合法括号序列。他打算选择一些由圆括号组成的字符串 $p$ 和 $q$,并将它们与 $s$ 合并得到字符串 $p+s+q$,即在 $s$ 前面加上字符串 $p$,在 $s$ 后面加上字符串 $q$。 现在他想知道,有多少对字符串 $p$ 和 $q$ 可以使 $p+s+q$ 成为一个合法的圆括号序列。由于这个数量可能非常大,他希望你将答案对 $10^{9}+7$ 取模后输出。

输入格式

第一行包含两个整数 $n$ 和 $m$($1\leq m\leq n \leq 100000,\, n-m\leq 2000$)——期望的字符串长度和 Gabi 买到的字符串长度。 第二行包含一个长度为 $m$ 的字符串 $s$,只包含字符 '(' 和 ')'。

输出格式

输出可以使 $p+s+q$ 成为一个合法圆括号序列的 $(p, q)$ 对的数量,对 $10^9+7$ 取模。

说明/提示

在第一个样例中,有四种不同的合法 $(p, q)$ 组合: 1. $p=$"(", $q=$"))" 2. $p=$"()", $q=$")" 3. $p=$"", $q=$"())" 4. $p=$"", $q=$")()" 在第二个样例中,唯一的办法是选择空的 $p$ 和 $q$。 在第三个样例中,没有办法得到合法的括号序列。 由 ChatGPT 5 翻译