#P16356. [2026年山东第二轮集训]小根堆

[2026年山东第二轮集训]小根堆

题目描述

给定一个由 nn+mm- 组成、长度为 n+mn+m 的字符串 ss,以及一个由 mm 个整数组成的集合

a={a1,a2,,am}.a=\{a_1,a_2,\ldots,a_m\}.

准备两个集合 X=X=\varnothingY=Y=\varnothing,并按照 i=1,2,,n+mi=1,2,\ldots,n+m 的顺序依次执行以下操作:

  • ss 的第 ii 个字符为 + 时,从 11nn 的整数中选择一个既不在 XX 中、也不在 YY 中的整数,将其加入集合 XX
  • ss 的第 ii 个字符为 - 时,从 XX 中取出最小的整数 xx,将其从 XX 中删除并加入集合 YY。根据约束,执行该操作前 XX 一定非空。

对于向 XX 中加入整数的顺序,共有 n!n! 种可能。求其中有多少种顺序能够使所有操作完成后满足

Y=a.Y=a.

答案对 998244353998244353 取模。

输入格式

第一行包含两个整数 n,mn,m

第二行包含一个长度为 n+mn+m 的字符串 ss

第三行包含 mm 个整数 a1,a2,,ama_1,a_2,\ldots,a_m

输出格式

输出一个整数,表示满足条件的方案数对 998244353998244353 取模后的结果。

样例 1

输入

4 2
++-++-
1 3

输出

4

样例 2

输入

6 4
++-++---++
2 3 4 6

输出

48

样例 3

输入

20 10
++++-++++++--+--+-+++++--+-++-
1 2 3 4 5 6 7 9 12 13

输出

179396825

样例 1 解释

满足条件的一组操作方案如下:

  1. i=1i=1 时,将 33 加入 XX,此时 X={3},Y=X=\{3\},Y=\varnothing
  2. i=2i=2 时,将 44 加入 XX,此时 X={3,4},Y=X=\{3,4\},Y=\varnothing
  3. i=3i=3 时,从 XX 中取出最小的 33,并将其从 XX 移入 YY。此时 X={4},Y={3}X=\{4\},Y=\{3\}
  4. i=4i=4 时,将 22 加入 XX,此时 X={2,4},Y={3}X=\{2,4\},Y=\{3\}
  5. i=5i=5 时,将 11 加入 XX,此时 X={1,2,4},Y={3}X=\{1,2,4\},Y=\{3\}
  6. i=6i=6 时,从 XX 中取出最小的 11,并将其从 XX 移入 YY。此时 X={2,4},Y={1,3}X=\{2,4\},Y=\{1,3\}

样例 2 解释

字符串 ss 的末尾不一定是 -

数据范围

对于全部数据:

  • 1mn5001\le m\le n\le 500
  • ss 是一个由 nn+mm- 组成、长度为 n+mn+m 的字符串;
  • 对于任意 i=1,2,,n+mi=1,2,\ldots,n+m,在 ss 的前 ii 个字符中,- 的数量不超过 + 的数量;
  • 1a1<a2<<amn1\le a_1<a_2<\cdots<a_m\le n

子任务

子任务编号 分值 nn\le mm\le 特殊性质
1 10 10
2 15
3 15 500 7
4 15
5 50
6 200
7 20 500