幂中幂plus
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

初始给定三个整数 base,c_0,mod,分别代表底数,幂数,模数。
对于任意的 i>0 ,都有 c_i=pow(base,c_{i-1}) \% mod
给定 q 次询问,每次询问给出一个整数 k ,请你求出 (\sum_{j=1}^{k} c_j) \% mod 的值。
特别地,我们定义 0^0=1

输入描述:

第一行有三个整数 base,c_0,mod\ (\ 1 \leq base,c_0 \leq 10^{18}\ )\ ,\ (\ 1 \leq mod \leq 10^6\ )
第二行有一个整数 q\ (\ 1 \leq q \leq 10^5\ )
随后 q 行,每行一个整数 k\ (\ 1 \leq k \leq 10^{18}\ )

输出描述:

输出 q 行,每行一个整数,代表 (\sum_{j=1}^{k} c_j) \% mod 的值。
示例1

输入

复制
13 3 79231
3
1
2
3

输出

复制
2197
9593
66390

说明

 ~~~~~~\begin{cases}<br />c_1 = 13^3 \bmod 79\,231 = 2\,197 \\<br />c_2 = 13 ^{2197} \bmod 79\,231 = 7\,396 \\<br />c_3 = 13^{7396} \bmod 79\,231 = 56\,797<br />\end{cases} 
示例2

输入

复制
1919 810 114514
5
76
114514
1919810
1000000000
1000000000000000000

输出

复制
3624
80720
63830
32422
97088