// SPDX-License-Identifier: CC0 #include #include #include #include #include using namespace std; using mint = atcoder::modint998244353; mint solve(const int n, const int m) { auto ans = mint(1); for (auto i : views::iota(1, m + 1)) { ans *= i; } for (auto i : views::iota(1, (1 << n) - m + 1)) { ans *= i; } if (m == 1 << n) return ans; auto dp = vector>(n + 1); dp[0] = vector{0, 1}; for (auto t : views::iota(0, n)) { dp[t + 1] = atcoder::convolution(dp[t], dp[t]); for (auto i : views::iota(0, ssize(dp[t]))) { dp[t + 1][i] += dp[t][i]; } } ans *= dp[n][(1 << n) - m]; return ans; } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; cout << solve(n, m).val() << "\n"; }