#P51096. 「2019 集训队互测 Day 2」序列

「2019 集训队互测 Day 2」序列

题目描述

小 J 用计算机生成了 nn 个长为 mm 的序列(每个序列的元素从 00m1m - 1 标号),具体生成方式如下:

对于每个序列,小 J 先将所有元素置为 00,再指定两个生成参数 xxvv,对序列进行如下操作:

for (i = x; i > 0; i -= lowbit(i))
    for (j = i - lowbit(i); j < i; j++)
        A[j] += i * (i ^ v);

其中 AA 表示该序列,lowbit(i)\mathrm{lowbit}(i) 表示 ii 在二进制下最低非零位的值,如 lowbit(20)=lowbit((10100)2)=(100)2=4\mathrm{lowbit}(20) = \mathrm{lowbit}\left(\left(10100\right)_2\right) = \left(100\right)_2 = 4

接下来小 M 会进行 qq 次询问,每次询问有两个参数 ccdd,请你回答前 cc 个序列 xor\mathrm{xor} 卷积的第 dd 项,即设前 cc 个序列为 S1,S2,ScS_1, S_2 \dots, S_c,求(\oplus 表示二进制按位异或运算):

\arrayp1p2pc=d0p1,p2,,pc<mi=1cSi,pi\sum_{{\array{p_1 \oplus p_2 \oplus \dots \oplus p_c = d \\ 0 \le p_1, p_2, \dots, p_c < m}}}{\prod_{i=1}^{c}{S_{i,p_i}}}

答案对 998244353998244353 取模

输入格式

输入第一行包含三个整数 nnmmqq

接下来 nn 行,每行包含两个整数 xxvv,依次表示每个序列的生成参数。

接下来 qq 行,每行包含两个整数 ccdd,依次表示每次询问的参数。

输出格式

对于每次询问,输出一行一个整数,表示所求的答案。

样例

5 4 4
1 2
2 3
4 3
4 5
2 1000000000
3 2
3 1
1 0
5 2
336
336
3
818435035

对于第一次询问,前 33 个序列分别为 [3,0,0,0][3, 0, 0, 0][2,2,0,0][2, 2, 0, 0][28,28,28,28][28, 28, 28, 28]

p=[0,0,2]p = [0, 0, 2]p=[0,1,3]p = [0, 1, 3] 时,符合条件,总权值为 3×2×28+3×2×28=3363 \times 2 \times 28 + 3 \times 2 \times 28 = 336

数据范围与提示

对于全部数据:

  • 1n7×1051 \le n \le 7 \times 10^51m1061 \le m \le 10^61q1051 \le q \le 10^5
  • 所有序列满足 1xm1 \le x \le m1v1091 \le v \le 10^9
  • 每次询问满足 1cn1 \le c \le n0d<m0 \le d < m

各子任务限制如下:

  • 子任务 111010 分):n5n \le 5m5m \le 5q5q \le 5
  • 子任务 221010 分):n100n \le 100m100m \le 100q100q \le 100
  • 子任务 332020 分):n2000n \le 2000m2000m \le 2000
  • 子任务 443030 分):n30000n \le 30000
  • 子任务 553030 分):无特殊限制。