1+ /* *
2+ * @file arc203_c.cpp
3+ * @author Macesuted (i@macesuted.moe)
4+ * @date 2025-08-03
5+ *
6+ * @copyright Copyright (c) 2025
7+ *
8+ */
9+
10+ #include < bits/stdc++.h>
11+ using namespace std ;
12+
13+ #ifndef LOCAL
14+ #define endl ' \n '
15+ #endif
16+
17+ bool mem1;
18+
19+ #define maxn 1000005
20+ #define mod 998244353
21+
22+ int64_t qpow (int64_t a, int64_t x) {
23+ int64_t ans = 1 ;
24+ while (x) {
25+ if (x & 1 ) ans = ans * a % mod;
26+ a = a * a % mod, x >>= 1 ;
27+ }
28+ return ans;
29+ }
30+ int64_t inv (int64_t a) { return qpow (a, mod - 2 ); }
31+
32+ int64_t fac[maxn], ifac[maxn];
33+
34+ int64_t binom (int n, int m) { return 0 <= m && m <= n ? fac[n] * ifac[m] % mod * ifac[n - m] % mod : 0 ; }
35+
36+ void solve (void ) {
37+ int64_t n, m, k;
38+ cin >> n >> m >> k;
39+
40+ if (k < n + m - 2 ) return cout << 0 << endl, void ();
41+ if (k == n + m - 2 ) return cout << binom (n + m - 2 , n - 1 ) << endl, void ();
42+ if (k == n + m - 1 ) return cout << binom (n + m - 2 , n - 1 ) * 2 * (n - 1 ) % mod * (m - 1 ) % mod << endl, void ();
43+
44+ int64_t v1 = 0 ;
45+ if (n >= 3 ) v1 = (v1 + binom (n + m - 3 , m) * (m - 1 ) % mod * (n - 2 ) - binom (n + m - 3 , m + 1 ) * m % mod * (m - 1 )) % mod;
46+ if (m >= 3 ) v1 = (v1 + binom (n + m - 3 , n) * (n - 1 ) % mod * (m - 2 ) - binom (n + m - 3 , n + 1 ) * n % mod * (n - 1 )) % mod;
47+
48+ int64_t v2 = (2 * (n - 1 ) * (m - 1 ) - 1 ) % mod * (n - 1 ) % mod * (m - 1 ) % mod * binom (n + m - 2 , n - 1 ) % mod;
49+ int64_t v3 = (n + m - 3 ) * binom (n + m - 4 , n - 2 ) % mod;
50+
51+ cout << ((v1 + v2 - v3) % mod + mod) % mod << endl;
52+
53+ return ;
54+ }
55+
56+ bool mem2;
57+
58+ int main () {
59+ ios::sync_with_stdio (false ), cin.tie (nullptr );
60+ #ifdef LOCAL
61+ cerr << " Memory Cost: " << abs (&mem1 - &mem2) / 1024 . / 1024 . << " MB" << endl;
62+ #endif
63+
64+ fac[0 ] = ifac[0 ] = 1 ;
65+ for (int i = 1 ; i < maxn; i++) fac[i] = fac[i - 1 ] * i % mod;
66+ ifac[maxn - 1 ] = inv (fac[maxn - 1 ]);
67+ for (int i = maxn - 2 ; i; i--) ifac[i] = ifac[i + 1 ] * (i + 1 ) % mod;
68+
69+ int _ = 1 ;
70+ cin >> _;
71+ while (_--) solve ();
72+
73+ #ifdef LOCAL
74+ cerr << " Time Cost: " << clock () * 1000 . / CLOCKS_PER_SEC << " MS" << endl;
75+ #endif
76+ return 0 ;
77+ }
0 commit comments