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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
#include <iomanip>
#include <limits>
#include <list>
#include <queue>
#include <tuple>
#include <map>
using namespace std;
#define MOD (long long int)(1e6+3)
#define ll long long int
#define rep(i,n) for(int i=0; i<(int)(n); i++)
#define reps(i,n) for(int i=1; i<=(int)(n); i++)
#define REP(i,n) for(int i=n-1; i>=0; i--)
#define REPS(i,n) for(int i=n; i>0; i--)
#define INF (int)(1123456789)
#define LINF (long long int)(112345678901234567)
#define chmax(a, b) a = (((a)<(b)) ? (b) : (a))
#define chmin(a, b) a = (((a)>(b)) ? (b) : (a))
#define all(v) v.begin(), v.end()

vector<ll> kaijo;
ll modpow(ll x, ll n) {
    if(n==0){
        return 1;
    }else if(n%2==0){
        ll h = modpow(x,n/2);
        return h * h % MOD;
    } else {
        return x * modpow(x,n-1) % MOD;
    }
}

int main(void){
	int q;
	cin>>q;
	int x,d,n;
	vector<int> X,D,N;
	rep(i,q){
		cin>>x>>d>>n;
		X.push_back(x);
		D.push_back(d);
		N.push_back(n);
	}

	kaijo.push_back(1);
	reps(i,MOD){
		kaijo.push_back((kaijo[i-1] * i)%MOD);
	}

	rep(i,q){
		x = X[i]; d = D[i]; n = N[i];
		if(d == 0){
			cout<< x * n << endl;
		}else{
			//  (x/d) * (x/d + 1) * ... * (x/d + n - 1) の　%MOD
			//= (x/d)の%MOD * (x/d + 1)の%MOD * ... * (x/d + n - 1)の%MOD
			//= (x/d)の%MOD * ((x/d)の%MOD + 1)%MOD * ... * ((x/d)の%MOD + n - 1)%MOD
			ll first = (x * modpow(d, MOD-2))%MOD;
			ll last = (x * modpow(d, MOD-2) + n - 1)%MOD;

			if(first > last || first == 0){
				//first > last : 1 * 2 * ... * last * first * first+1 * ... * MOD-1 * MOD(=0)
				cout << 0 << endl;	
			}else{
				cout << kaijo[last] * modpow(kaijo[first - 1], MOD-2) %MOD * modpow(d,n) %MOD << endl;
			}
		}
	}
	return 0;
}