#CF1783D. 不同的数组

不同的数组

不同的数组

  • 时间限制:2 秒
  • 内存限制:512 MiB

题目描述

给定一个包含 nn 个整数的数组 aa。

你需要依次对数组执行 n−2n-2 次操作。在第 ii 次操作(1≤i≤n−21\le i\le n-2)中,你可以选择以下两种方式之一:

  • 将当前的 ai+1a_{i+1} 加到 aia_i 上,并从 ai+2a_{i+2} 中减去 ai+1a_{i+1};
  • 将当前的 ai+1a_{i+1} 加到 ai+2a_{i+2} 上,并从 aia_i 中减去 ai+1a_{i+1}。

也就是说,你需要将 ai+1a_{i+1} 加到它的一个相邻元素上,并从另一个相邻元素中减去 ai+1a_{i+1}。每一步都使用执行该步之前数组中的当前值。

例如,从数组 [1,2,3,4,5][1,2,3,4,5] 出发,可以进行如下操作:

  • 从 a3a_3 中减去 22,并将 22 加到 a1a_1 上,数组变为 [3,2,1,4,5][3,2,1,4,5];
  • 从 a2a_2 中减去 11,并将 11 加到 a4a_4 上,数组变为 [3,1,1,5,5][3,1,1,5,5];
  • 从 a3a_3 中减去 55,并将 55 加到 a5a_5 上,数组变为 [3,1,−4,5,10][3,1,-4,5,10]。

如果一个数组能通过上述操作序列从 aa 得到,则称它为一个可达数组。求不同可达数组的数量。答案可能很大,请对 998244353998244353 取模。

输入格式

第一行包含一个整数 nn。

第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

输出格式

输出一个整数,表示不同可达数组的数量对 998244353998244353 取模后的结果。

样例输入 1

4
1 1 1 1

样例输出 1

3

样例输入 2

5
1 2 3 5 0

样例输出 2

7

数据范围

对于所有测试数据,3≤n≤3003\le n\le 300,0≤ai≤3000\le a_i\le 300。

子任务编号 分值 特殊限制
1 24 n≤18n\le 18
2 36 ∑i=2n−1ai≤4000\sum_{i=2}^{n-1}a_i\le 4000
3 40 无特殊限制