Problem:
Score : 600 points

Problem Statement

Consider the following arithmetic progression with n terms:

x, x + d, x + 2d, \ldots, x + (n-1)d

What is the product of all terms in this sequence?
Compute the answer modulo 1\ 000\ 003.

You are given Q queries of this form.
In the i-th query, compute the answer in case x = x_i, d = d_i, n = n_i.

Constraints

1 \leq Q \leq 10^5

0 \leq x_i, d_i \leq 1\ 000\ 002

1 \leq n_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

Q
x_1 d_1 n_1
:
x_Q d_Q n_Q

Output

Print Q lines.

In the i-th line, print the answer for the i-th query.

Sample Input 1

2
7 2 4
12345 67890 2019

Sample Output 1

9009
916936

For the first query, the answer is 7 \times 9 \times 11 \times 13 = 9009.
Don't forget to compute the answer modulo 1\ 000\ 003.

Solution in PyPy3 (2.4.0) (judge verdict: Wrong Answer)

import sys


#互いに素なa,bについて、a*x+b*y=1の一つの解
def extgcd(a, b):
    r = [1, 0, a]
    w = [0, 1, b]
    while w[2] != 1:
        q = r[2] // w[2]
        r2 = w
        w2 = [r[0] - q * w[0], r[1] - q * w[1], r[2] - q * w[2]]
        r = r2
        w = w2
    #[x,y]
    return [w[0], w[1]]


# aの逆元(mod m)を求める。(aとmは互いに素であることが前提)
def mod_inv(a, m):
    x = extgcd(a, m)[0]
    return (m + x % m) % m


readline = sys.stdin.readline
MOD_NUM = 10**6 + 3

Q = int(readline())
q_array = [list(map(int, readline().split())) for i in range(Q)]
ans_array = []

factorial = [1] * MOD_NUM
factorial_inv = [1] * MOD_NUM

tmp = 1
for i in range(2, MOD_NUM):
    tmp = tmp * i % MOD_NUM
    factorial[i] = tmp
    factorial_inv[i] = mod_inv(tmp, MOD_NUM)

for q in q_array:
    x, d, n = q
    print(x, d, n)
    if x == 0:
        ans_array.append("0\n")
        continue
    if d == 0:
        ans = pow(x, n, MOD_NUM)
        ans_array.append(str(ans) + "\n")
    else:
        x_start = x * mod_inv(d, MOD_NUM) % MOD_NUM
        if x_start + n > MOD_NUM:
            ans_array.append("0\n")
        else:
            ans = factorial[x_start + n - 1] * factorial_inv[
                x_start - 1] * pow(d, n, MOD_NUM) % MOD_NUM
            ans_array.append(str(ans) + "\n")

sys.stdout.writelines(ans_array)