#3841. LIS

LIS

强哥手上有一个长度为 nn 的数组 pp(下标为 1n1\sim n),每个位置的值是 1,...,n1,...,n 中的一个整数。

然后强哥按照LISO(n2)O(n^2) 做法,求出了以每个元素为结尾的LIS长度。我们令以 pip_i 为结尾的 LIS 长度是 aia_i

但是接着,意外发生了。

强哥在求解出了 aa 数组之后开心地喝了一大瓶伏特加,由于他喝得实在是太多,直接喝吐了,还吐到了刚刚进行演算的草稿纸上。pp 数组直接变得无法阅读,而 aa 数组还能阅读的也只有部分。

强哥有点着急了,因为他计划取出 aa 数组中的某些元素作为他和他女神聊天的暗号。现在他想知道根据目前的残骸,能推出多少种不同的暗号。

输入格式

第一行输入 nn

接下来一行 nn 个整数,且对于第 ii 个数:

  • 若这个数大于 00,则表示 aia_i
  • 若这个数等于 00,则表示 aia_i 的值已经无法阅读,但是强哥需要知道这个值。
  • 若这个数等于 1-1,则表示 aia_i 的值已经无法阅读,但是强哥也不需要知道这个值。

输出格式

输出一个数字表示答案 mod998244353\mod 998244353

4
0 0 0 0
15

样例解释 #1

穷举可知真的有 1515 种方案。

4
0 -1 0 0
10

样例解释 #2

穷举可知,只关心第 1,2,41,2,4 个位置的情况下,真的只有 1010 种方案。

7
-1 2 0 0 -1 0 0
235
7
-1 2 0 0 1 0 0
151

数据范围

对于 10%10\% 的数据:n7n\leq 7

对于 15%15\% 的数据:n9n\leq 9

对于 20%20\% 的数据:n10n\leq 10

对于 30%30\% 的数据:n20n\leq 20

对于另 10%10\% 的数据:保证 ai=0a_i=0

对于另 15%15\% 的数据:保证 ai0a_i\geq 0

对于另 15%15\% 的数据:保证 ai0a_i\leq 0

对于 100%100\% 的数据:n5000,1aiin\leq 5000,-1\leq a_i\leq i