#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; template using matrix = vector>; template matrix dot(matrix &a, matrix &b){ int N = a.size(); matrix c(N, vector(N)); for (int i=0; i matrix pow(matrix a, ll N){ int M = a.size(); matrix b(M, vector(M)); for (int i=0; i>= 1; a = dot(a, a); } return b; } int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); ll N, T, k, l; cin >> N >> T >> k >> l; mint iv = mint(6).inv(), a = iv*(k-1), b = iv*(l-k), c = iv*(7-l); vector dp(T+1); dp[1] = 1; for (int i=1; i<=T-1; i++){ dp[i+1] += dp[i] * a; if (i != T-1) dp[i+2] += dp[i] * b; } if (N <= T){ cout << dp[N].val() << endl; return 0; } /* M^(k)[0] * dpがT+kの答え */ N -= T; vector M(T, vector(T)); M[0][0] = a; M[0][1] = b; M[0][T-1] = c; for (int i=1; i