#include #include const int MOD = 998244353; using namespace std; // ???? ????? ?????? ???????? vector factorial(int n) { vector fact(n + 1); fact[0] = 1; for (int i = 1; i <= n; ++i) { fact[i] = (fact[i - 1] * i) % MOD; } return fact; } // ???? ????? ??????? ???????? ???? ????? long long modInverse(long long a, long long p) { long long result = 1; long long exponent = p - 2; // p ?? ??? ???? while (exponent) { if (exponent % 2 == 1) { result = (result * a) % p; } a = (a * a) % p; exponent /= 2; } return result; } // ???? ????? ??? ??????? long long countTrees(int N, int P) { if (P > N || (N - P * 8) < 0) return 0; // ??? ??? ??? ??? ?????????? ???? ?? ??? ?????? long long totalTrees = 0; auto fact = factorial(N); // ????? ?? ????? ?????? for (int k = P; k <= N; k++) { if (N - k * 8 < 0) break; int remaining = N - k * 8; // ?????? ???????? int thorns = remaining / 4; // ??? ????? ?????? if (thorns * 4 + remaining % 4 != 0) continue; // ??? ?? ???? ????????? ????? // ???? ??? ????? long long ways = (fact[N] * modInverse(fact[k], MOD)) % MOD; // ????? ?????? ways = (ways * modInverse(fact[remaining], MOD)) % MOD; // ????? ?????? ???????? totalTrees = (totalTrees + ways) % MOD; } return totalTrees; } int main() { int N, P; cin >> N >> P; cout << countTrees(N, P) << endl; return 0; }