题号:NC200047
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
Cirno (⑨) 具有操纵冷气程度的能力,某一天,Cirno想要改进她的冻符「Minus K」,具体地说,她想要做这样一件事:
Cirno首先会放出1个冰块,这里记作

。
之后她会控制这个冰块使其分裂,这里将

分裂产生的冰块记作

。
之后她可能会再次控制
全部的

使其分裂,使其变成新的冰块,记作

,以此类推。
形式化地,对于冰块

,进行分裂后会得到冰块

,并且只要Cirno下定决心将某一种冰块分裂,
全部此种冰块都会被分裂。
定义一个计数函数cnt(x),表示冰块x总共产生过多少个。
显然最初的冰块

只有一个,即
%20%3D%201)
。
Cirno会将

分裂成

份

,所以
%20%3D%20k_1)
。
以此类推,Cirno总会将每个

分裂成

份

。
Cirno会分裂冰块n次,之后Cirno想知道从

到

的每种冰块总共出现了多少次(包含

和

),因为结果可能很大,无法使用普通的整型存放下,所以请将结果对20090909取模。
形式化表述为,对于每次询问

,输出
%20%5Cmod%2020090909)
的值。
输入描述:
输入第一行包含两个正整数n和q,之间使用一个空格符分隔,表示Cirno分裂冰块的次数,以及询问次数。
之后第二行包含n个正整数,相邻正整数之间使用一个空格符分隔,按照输入顺序的第i个正整数记作
,表示会将冰块
分裂成
块冰块
。
之后连续输入q行,每行一个两个非负整数,之间使用一个空格符分隔,这种输入的第i行的两个整数记作
,即题目描述中的每次询问。
数据规范:
*
.
*
.
*
.
输出描述:
输出q行,每行一个正整数,即按照输入顺序依次回答每次询问。
示例1
输入
复制
2 6
2 3
0 0
1 1
2 2
0 1
1 2
0 2
备注:
数据量较大,请使用相对快速的输入输出方式。