#include using namespace std; #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include using namespace atcoder; using mint = modint998244353; #define rep1(a) for (int z = 0; z < a; z++) #define rep2(i, a) for (ll i = 0; i < a; i++) #define rep3(i, a, b) for (int i = a; i < b; i++) #define rep4(i, a, b, c) for (int i = a; i < b; i += c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define ALL(x) std::begin(x), std::end(x) #define YN(x) cout << (x ? "Yes" : "No") << endl; #define popc(x) __builtin_popcount(x) #define cmp(x, l, r) ((l <= x) && (x <= r)) #define rrep(i, a) for (int i = (a)-1; i >= 0; i--) #define ll long long constexpr int MOD = 998244353; vector f={1,808258749,117153405,761699708,573994984,62402409,511621808,242726978,887890124,875880304}; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n,k,p=1e8; cin>>n>>k; auto m=n-k; ll A=n/p,a=n%p,B=k/p,b=k%p,C=m/p,c=m%p; mint s=f[A],t=f[B],u=f[C]; auto x=max({a,b,c}); rep(i,1,x+1){ if(i<=a)s*=(A*p+i); if(i<=b)t*=(B*p+i); if(i<=c)u*=(C*p+i); } t*=u; s/=t; cout<