#THU20181B. 路径

    ID: 192 Type: Default 1000ms 512MiB Tried: 1 Accepted: 1 Difficulty: 3 Uploaded By: Tags>清华推研机试考研动态规划其他位运算

路径

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

为了帮助你理解题意,我们先定义函数 F(x)F(x) 表示 xx 在二进制表示下 11 的个数。例如 F(3)=2F(3) = 2 因为 33 的二进制表示为 11(2)11_{(2)};而 F(2)=1F(2) = 1 因为 22 的二进制表示为 10(2)10_{(2)}

现在有一个 nn 个点的图,第 ii 个点的点权为 AiA_i,对于任意 1i<jn1 \le i \lt j \le nF(AiAj)F(A_i \otimes A_j) 条从 ii 号点连向 jj 号点的不同的有向边,其中 \otimes 表示二进制下按位与的操作。显然这是一个有向无环图。

请你求出:有多少条不同的从 11 号点到 nn 号点的路径。我们认为两条路径不同,当且仅当存在至少一条边,在其中一条路径中被经过,而在另一条路径中没有被经过。由于答案可能很大,你只需要输出答案对 991127991127 取模的结果。

注:我们认为从 11 号点到 11 号点(即 n=1n = 1 的特殊情况)的不同路径有 11 条。

输入格式

从标准输入读入数据。

第一行一个整数 nn,表示点的个数。

接下来一行 nn 个整数,第 ii 个整数表示第 ii 个点的点权 AiA_i

输出格式

输出到标准输出。

一行一个整数表示答案对 991127991127 取模的结果。

3
1 3 2
1

子任务

对于所有数据,保证 1n2×105, 1Ai1091 \le n \le 2 \times 10^5,~1 \le A_i \le 10^9

本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。

  • 子任务 1(15 分):n16n\le 16
  • 子任务 2(30 分):n1000n\le 1000
  • 子任务 3(10 分):Ai=iA_i=i
  • 子任务 4(15 分):Ai200A_i\le 200
  • 子任务 5(25 分):Ai105A_i\le 10^5
  • 子任务 6(5 分):无特殊限制。