Problem p02685 (C++) — buggy submission, verdict: Runtime Error

/*
 * Author : MaxSally
 */
/********   All Required Header Files ********/
#include <bits/stdc++.h>
using namespace std;
/*******  All Required define Pre-Processors and typedef Constants *******/
#define SCD(t) scanf("%d", &t)
#define SCLD(t) scanf("%ld", &t)
#define SCLLD(t) scanf("%lld", &t)
#define SCC(t) scanf("%c", &t)
#define SCS(t) scanf("%s", t)
#define SCF(t) scanf("%f", &t)
#define SCLF(t) scanf("%lf", &t)
#define mem(a, b) memset(a, (b), sizeof(a))
#define rep(i, j, k) for (int i = j; i <= k; ++i)
#define rrep(i, j, k) for (int i = j; i >= k; --i)
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define foreach(i, a) for (auto i : a)
#define forEach(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define in(A, B, C) assert(B <= A && A <= C)
#define mp make_pair
#define pb push_back
#define inf (int)(1e9 + 7)
#define epsi 1e-9
#define PI 3.1415926535897932384626433832795
#define mod 998244353
#define read(type) readInt<type>()
#define io                                                                     \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define ll long long int
#define left tuyiuoi
#define right fgjhk
#define ss second
#define ff first
#define debug(a) cout << #a << ": " << a << endl
#define debuga1(a, l, r)                                                       \\
  rep(i, l, r) cout << a[i] << " ";                                            \\
  cout << endl
#define Flag(n) cout << "here " << n << endl
const double pi = acos(-1.0);
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vl> vll;
typedef pair<ll, ll> pll;
typedef vector<string> vs;
typedef vector<pii> vii;
typedef vector<pll> vpll;
typedef vector<vi> vvi;
typedef map<int, int> MPII;
typedef set<int> SETI;
typedef multiset<int> MSETI;
typedef long int int32;
typedef unsigned long int uint32;
typedef long long int int64;
typedef unsigned long long int uint64;

const int N = 200005;
ll a[N], fact[N], invFactorial[N];
ll n, m, k;

ll fastMultiplication(ll a, int b) {
  ll ans = 1;
  while (b > 0) {
    if (b & 1) {
      ans = (ans * a) % mod;
    }
    a = (a * a) % mod;
    b >>= 1;
  }
  return ans;
}

int main() {
  io;
  // freopen("input.txt", "r", stdin);
  cin >> n >> m >> k;
  fact[0] = 1;
  invFactorial[0] = 1;
  rep(i, 1, n) {
    fact[i] = (fact[i - 1] * i) % mod;
    invFactorial[i] = fastMultiplication(fact[i], mod - 2);
  }
  ll ans = 0;
  rep(i, 0, k) {
    ll C = (((fact[n - 1] * invFactorial[i]) % mod) * invFactorial[n - 1 - i]) %
           mod;
    ans =
        (ans + (((C * m) % mod) * fastMultiplication(m - 1, n - 1 - i)) % mod) %
        mod;
  }
  cout << ans;
  return 0;
}


Error: WA

Fixed submission:

#include <bits/stdc++.h>
using namespace std;

long long m, k;
long long p(int n, long long data[]) {
  if (data[n] != 0)
    return data[n];
  long long out = 0;
  for (long long i = 1; i <= k + 1; i++)
    out = (out + p(n - i, data)) % 998244353;
  out *= (m - 1);
  return data[n] = (out % 998244353);
}
int main() {
  int n;
  long long data[50000];
  scanf("%lld%lld%lld", &n, &m, &k);
  data[0] = 1;
  for (long long i = 1; i <= k + 1; i++)
    data[i] = (data[i - 1] * m) % 998244353;
  printf("%lld", p(n, data) % 998244353);
}