// (◕ᴗ◕✿) // #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #define rep(i, n) for (ll i = 0; i < (n); i++) #define srep(i, s, n) for (ll i = s; i < (n); i++) #define len(x) ((int)(x).size()) #define all(x) (x).begin(), (x).end() using namespace std; template using vc = vector; template using vv = vc>; template using vvv = vv>; using vi = vc;using vvi = vv; using vvvi = vv; using ll = long long;using vl = vc;using vvl = vv; using vvvl = vv; using ld = long double; using vld = vc; using vvld = vc; using vvvld = vc; using uint = unsigned int; using ull = unsigned long long; const ld pi = acos(-1.0); const int inf = 0x3f3f3f3f; const ll INF = 0x3f3f3f3f3f3f3f3f; // const ll mod = 1000000007; const ll mod = 998244353; inline bool inside(ll y, ll x, ll H, ll W) {return 0 <= (y) and (y) < (H) and 0 <= (x) and (x) < (W); } #define debug(var) do { cerr << #var << " :\n"; view(var); } while(0) templatevoid view(const T& e) {cerr << e;} templatevoid view(const pair& p) {cerr << "{" << p.first << ", " << p.second << "}";} templatevoid view(const vc& v) {for (const auto& e : v) {view(e);cerr << " ";} cerr << endl;} templatevoid view(const vv& vv) {for (const auto& v : vv) {view(v);} cerr << endl;} templatevoid view(const set& s) {for (const auto& e : s) {view(e);cerr << " ";} cerr << endl;} templatevoid view(const multiset& s) {for (const auto& e : s) {view(e);cerr << " ";} cerr << endl;} templatevoid view(const unordered_set& s) {for (const auto& e : s) {view(e);cerr << " ";} cerr << endl;} templatevoid view(const map& mp){for (const auto& e : mp) {view(e);cerr << " ";} cerr << endl;} ll pow_mod(ll a, ll d, ll m){ ll ret = 1; while (d > 0){ if (d & 1){ ret *= a; ret %= m; } a = a * a % m; d >>= 1; } return ret; } void solve(){ ll A, B, K; cin >> A >> B >> K; if (abs(B) <= 1 || A == 0){ if (A < 0) cout << (A * K % mod + mod) % mod << endl; else cout << A * K % mod << endl; return; } if (A < 0 && B < 0){ // b : odd if (K == 1) cout << 0 << endl; else if (K % 2){ cout << pow_mod(-B, K - 2, mod) * 2 * (-A) % mod << endl; }else{ cout << pow_mod(-B, K - 1, mod) * (-A) % mod << endl; } } if (A < 0 && B > 0){ cout << 0 << endl; } if (A > 0 && B < 0){ if (K <= 2) cout << K * A % mod << endl; else if (K % 2){ cout << pow_mod(-B, K - 1, mod) * A % mod << endl; }else{ cout << pow_mod(-B, K - 2, mod) * 2 * A % mod << endl; } // for (int a = (K % 2);a <= K; a += 2){ // ll sm = A * a; // if (1 + 2 * A / sm < B * B){ // ll ans = sm % mod * pow_mod(B, K - a, mod) % mod; // cout << ans << endl; // return; // } // } } if (A > 0 && B > 0){ cout << pow_mod(B, K - 1, mod) * A % mod << endl; // a < 1 / (B - 1) // for (int a = 1;; a ++){ // ll sm = A * a; // if (sm + A < sm * B){ // ll ans = sm % mod * pow_mod(B, K - a, mod) % mod; // cout << ans << endl; // return; // } // } } // cout << 0 << endl; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int T = 1; cin >> T; while (T--) solve(); }