#CF2038D. 除还是或

除还是或

D. 除还是或
每次测试的时间限制:3 秒
每次测试的内存限制:512 兆字节

给你一个由 0010910^9 之间的整数组成的数组 [a1,a2,,an][a_1, a_2, \dots, a_n]
你需要把这个数组分成若干个连续的段(可能只有一段),使得每个元素恰好属于一个段。

设第一段为 [al1,al1+1,,ar1][a_{l_1}, a_{l_1+1}, \dots, a_{r_1}]
第二段为 [al2,al2+1,,ar2][a_{l_2}, a_{l_2+1}, \dots, a_{r_2}]
……,
最后一段为 [alk,alk+1,,ark][a_{l_k}, a_{l_k+1}, \dots, a_{r_k}]
由于每个元素应恰好属于一个数组,所以 l1=1l_1 = 1rk=nr_k = n,并且对每个 ii11k1k-1ri+1=li+1r_i + 1 = l_{i+1}

分割必须满足以下条件:

$$f([a_{l_1}, a_{l_1+1}, \dots, a_{r_1}]) \le f([a_{l_2}, a_{l_2+1}, \dots, a_{r_2}]) \le \cdots \le f([a_{l_k}, a_{l_k+1}, \dots, a_{r_k}]) $$

其中 f(a)f(a) 是数组 aa 中所有元素的按位或

计算分割数组的方式的数量,结果对 998244353998244353 取模。
如果表示分割的序列 [l1,r1,l2,r2,,lk,rk][l_1, r_1, l_2, r_2, \dots, l_k, r_k] 不同,则视为不同的方式。


输入
第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5)—— 数组 aa 的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai1090 \le a_i \le 10^9)—— 给定数组的元素。


输出
输出一个整数 —— 分割数组的方式的数量,对 998244353998244353 取模。


样例

样例 1
输入

3
1 2 3

输出

4

样例 2
输入

5
1000 1000 1000 1000 1000

输出

16

样例 3
输入

3
3 4 6

输出

3

注释
在第三个样例中,有 33 种有效的分割方式:

  • k=3k=3l1=1,r1=1,l2=2,r2=2,l3=3,r3=3l_1=1, r_1=1, l_2=2, r_2=2, l_3=3, r_3=3;得到的数组为 [3][3][4][4][6][6],且 3463 \le 4 \le 6
  • k=2k=2l1=1,r1=1,l2=2,r2=3l_1=1, r_1=1, l_2=2, r_2=3;得到的数组为 [3][3][4,6][4,6],且 363 \le 6
  • k=1k=1l1=1,r1=3l_1=1, r_1=3;只有一个数组 [3,4,6][3,4,6]

如果将数组分成 [3,4][3,4][6][6],第一个数组的按位或是 77,第二个数组的按位或是 667>67 > 6,因此这种分割方式无效。