# https://atcoder.jp/contests/m-solutions2019/submissions/5741430

from operator import mul

import sys



input = sys.stdin.readline



MOD = 10 ** 6 + 3





def inv(n):

    return pow(n, MOD - 2, MOD)





def mod_mul(x, y):

    return mul(x, y) % MOD





fact = [1]

for n in range(1, MOD):

    fact.append(mod_mul(fact[-1], n))

    # d>1 の数列を d=1 となる数列に変換する

    # MODの倍数を含む数列の積は0になるので,

    # MODの倍数を含まない区間の積が計算できればよい

    # そのような区間の右端はMOD-1であり,fact[MOD-1]が計算できればよい



Q = int(eval(input()))

for _ in range(Q):

    x, d, n = list(map(int, input().split()))



    if x == 0:

        print((0))

        continue



    if d == 0:

        print((pow(x, n, MOD)))

        continue



    xd = mod_mul(x, inv(d))

    if MOD - xd < n:

        print((0))

        continue



    dn = pow(d, n, MOD)

    print((mod_mul(mod_mul(fact[xd + n - 1], inv(fact[xd - 1])), dn)))

# https://atcoder.jp/contests/m-solutions2019/submissions/5741430

from functools import reduce

from operator import mul

import sys



input = sys.stdin.readline



MOD = 10 ** 6 + 3





def inv(n):

    return pow(n, MOD - 2, MOD)





def mod_mul(x, y):

    return mul(x, y) % MOD





fact = [1]

for n in range(1, MOD):

    fact.append((fact[-1] * n) % MOD)

    # d>1 の数列を d=1 となる数列に変換する

    # MODの倍数を含む数列の積は0になるので,

    # MODの倍数を含まない区間の積が計算できればよい

    # そのような区間の右端はMOD-1であり,fact[MOD-1]が計算できればよい



Q = int(eval(input()))

for _ in range(Q):

    x, d, n = list(map(int, input().split()))



    if x == 0:

        print((0))

        continue



    if d == 0:

        print((pow(x, n, MOD)))

        continue



    xd = (x * inv(d)) % MOD

    if MOD - xd < n:

        print((0))

        continue



    dn = pow(d, n, MOD)

    print((reduce(mod_mul, (fact[xd + n - 1], inv(fact[xd - 1]), dn))))

# https://atcoder.jp/contests/m-solutions2019/submissions/5741430
from operator import mul
import sys

input = sys.stdin.readline
MOD = 10**6 + 3


def inv(n):
    return pow(n, MOD - 2, MOD)


def mod_mul(x, y):
    return mul(x, y) % MOD


fact = [1]
for n in range(1, MOD):
    fact.append(mod_mul(fact[-1], n))
    # d>1 の数列を d=1 となる数列に変換する
    # MODの倍数を含む数列の積は0になるので,
    # MODの倍数を含まない区間の積が計算できればよい
    # そのような区間の右端はMOD-1であり,fact[MOD-1]が計算できればよい
Q = int(eval(input()))
for _ in range(Q):
    x, d, n = list(map(int, input().split()))
    if x == 0:
        print((0))
        continue
    if d == 0:
        print((pow(x, n, MOD)))
        continue
    xd = mod_mul(x, inv(d))
    if MOD - xd < n:
        print((0))
        continue
    dn = pow(d, n, MOD)
    print((mod_mul(mod_mul(fact[xd + n - 1], inv(fact[xd - 1])), dn)))

# https://atcoder.jp/contests/m-solutions2019/submissions/5741430
from functools import reduce
from operator import mul
import sys

input = sys.stdin.readline
MOD = 10**6 + 3


def inv(n):
    return pow(n, MOD - 2, MOD)


def mod_mul(x, y):
    return mul(x, y) % MOD


fact = [1]
for n in range(1, MOD):
    fact.append((fact[-1] * n) % MOD)
    # d>1 の数列を d=1 となる数列に変換する
    # MODの倍数を含む数列の積は0になるので,
    # MODの倍数を含まない区間の積が計算できればよい
    # そのような区間の右端はMOD-1であり,fact[MOD-1]が計算できればよい
Q = int(eval(input()))
for _ in range(Q):
    x, d, n = list(map(int, input().split()))
    if x == 0:
        print((0))
        continue
    if d == 0:
        print((pow(x, n, MOD)))
        continue
    xd = (x * inv(d)) % MOD
    if MOD - xd < n:
        print((0))
        continue
    dn = pow(d, n, MOD)
    print((reduce(mod_mul, (fact[xd + n - 1], inv(fact[xd - 1]), dn))))

+from functools import reduce -    fact.append(mod_mul(fact[-1], n)) +    fact.append((fact[-1] * n) % MOD) -    xd = mod_mul(x, inv(d)) +    xd = (x * inv(d)) % MOD -    print((mod_mul(mod_mul(fact[xd + n - 1], inv(fact[xd - 1])), dn))) +    print((reduce(mod_mul, (fact[xd + n - 1], inv(fact[xd - 1]), dn))))