#include #include using mint = atcoder::modint998244353; long K, L, R, i, j, k; using v = std::vector; using vv = std::vector; #define m(x) vv x(K + 4, v(K + 4)) vv op(vv a, vv b) { m(r); for (i = 0; i < K + 4; i++) for (k = 0; k < K + 4; k++) for (j = 0; j < K + 4; j++) { r[i][j] += a[i][k] * b[k][j]; } return r; } vv pw(vv a, long n) { m(r); for (i = 0; i < K + 4; i++) r[i][i] = 1; while (n) { if (n & 1) r = op(r, a); a = op(a, a); n >>= 1; } return r; } main() { scanf("%ld%ld%ld", &K, &L, &R); vv A(K + 4, v(K + 4)); for (i = 0; i <= K; i++) { A[i][0] = A[i][i] = 1; for (j = 1; j < i; j++) { A[i][j] = A[i - 1][j - 1] + A[i - 1][j]; } } A[K + 1][K + 1] = K, A[K + 1][K] = A[K + 1][K + 2] = 1; A[K + 2][K + 2] = K; A[K + 3][K + 3] = 1, A[K + 3][K + 1] = K, A[K + 3][K] = A[K + 3][K + 2] = 1; mint ans = 0; v B(K + 4); B[0] = B[K + 1] = B[K + 2] = B[K + 3] = 1; { auto RA = pw(A, R); for (i = 0; i < K + 4; i++) ans += RA[K + 3][i] * B[i]; } if (L - 1 >= 0) { auto LA = pw(A, L - 1); for (i = 0; i < K + 4; i++) ans -= LA[K + 3][i] * B[i]; } printf("%d", ans.val()); }