func_code_string: #include <bits/stdc++.h>   using namespace std;   const int Maxn = 1e7 + 10, M = 998244353;   int n, m, k, inv[Maxn], s[Maxn], idk[Maxn];   int mo2(int x) { return (x < 0) ? x + M : x; }   int fpow(int a, int p = M - 2) {     int ret = 1;     for (; p; p >>= 1, a = 1ll * a * a % M)       if (p & 1) ret = 1ll * ret * a % M;     return ret;   }   void init(int n) {     inv[1] = 1;     for (int i = 2; i <= n; i++) inv[i] = M - 1ll * inv[M % i] * (M / i) % M;   }   void get_idk(int k) {     for (int i = 0; i <= k; i++) idk[i] = fpow(i, k);   }   int main() {     scanf( %d%d%d , &n, &m, &k);     int p = fpow(m);     init(k);     s[k] = 1;     int pw = 1, C = 1;     for (int i = k - 1; i >= 0; i--) {       pw = 1ll * pw * (M - p) % M;       C = 1ll * C * (n - i - 1 + M) % M * inv[k - i] % M;       s[i] = (1ll * (1 - p + M) * s[i + 1] + 1ll * C * pw) % M;     }     int E = 0;     pw = C = 1;     get_idk(k);     for (int i = 1; i <= k; i++) {       pw = 1ll * pw * p % M;       C = 1ll * C * (n - i + 1 + M) % M * inv[i] % M;       E = (E + 1ll * idk[i] * C % M * pw % M * s[i]) % M;     }     printf( %d n , E);     return 0;   }   