// #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair PP; // #define MOD 1000000007 #define MOD 998244353 #define INF 2305843009213693951ll #define PI 3.141592653589 #define setdouble setprecision #define REP(i,n) for(ll i=0;i<(n);++i) #define OREP(i,n) for(ll i=1;i<=(n);++i) #define RREP(i,n) for(ll i=(n)-1;i>=0;--i) #define ORREP(i,n) for(ll i=(n);i>=1;--i) #define rep(i,a,b) for(ll i=(a);i<=(b);++i) #define ALL(v) (v).begin(), (v).end() #define chmin(k,m) k = min(k,m) #define chmax(k,m) k = max(k,m) #define GOODBYE do { cout << "-1" << endl; return 0; } while (false) #define MM <<" "<< #define Endl endl long long power(long long b,long long e){ // Copyright (c) 2023 0214sh7 // https://github.com/0214sh7/library/ long long r=1; while(e){ if(e&1){ r=(r*b)%MOD; } b=(b*b)%MOD; e >>=1; } return r; } ll solve(ll A, ll B, ll K){ if(B==0){ return max(0ll,(A*K)%MOD); } if(A==0){ return 0; } if(A<0){ if(B>0){ return 0; } // 両方負なら、まず K<=1 なら 0 if(K<=1){ return 0; } // K>=2 、 B=-1 なら 基本 A で最後 B if(B==-1){ ll Ans = (-A*(K-1))%MOD; return Ans; } // K>=2, abs(B)>=2 で K が偶数なら AB...B if(K%2==0){ ll Ans = abs(A)%MOD; Ans = (Ans * power(abs(B)%MOD,K-1))%MOD; return Ans; } // K>=2, abs(B)>=2 で K が奇数なら AAB...B ll Ans = (2*abs(A))%MOD; Ans = (Ans * power(abs(B)%MOD,K-2))%MOD; return Ans; } // 以下 A>0 if(B>0){ // どちらも正 if(abs(B)==1){ return (K*A)%MOD; } ll Ans = A%MOD; Ans = (Ans * power(B%MOD,K-1))%MOD; return Ans; } // 以下 A>0, B<0 if(abs(B)==1){ return (K*A)%MOD; } // A>0, B<=-2 if(K<=2){ return (K*A)%MOD; } if(K%2==1){ ll Ans = A%MOD; Ans = (Ans * power((-B)%MOD,K-1))%MOD; return Ans; } ll Ans = (2*A)%MOD; Ans = (Ans * power((-B)%MOD,K-2))%MOD; return Ans; } int main(void){ cin.tie(nullptr); ios::sync_with_stdio(false); ll T; cin >> T; REP(_,T){ ll A,B,K; cin >> A >> B >> K; ll Ans = solve(A,B,K); cout << Ans << endl; } return 0; }