func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 998244353;   const int maxn = 2e5 + 100;   long long dp[52][52][52];   bool vis[52][52][52];   long long val[52][52][52];   int a[maxn], w[maxn];   long long qmod(long long a, long long b) {     long long ans = 1;     while (b) {       if (b & 1) ans = ans * a % mod;       b >>= 1;       a = a * a % mod;     }     return ans;   }   int flag;   int dfs(int n, int i, int j, int k, long long p, long long v, long long sp,           long long sn) {     if (!n) {       return 1LL * p * v % mod;     }     if (vis[i][j][k]) {       return val[i][j][k] * qmod(dp[i][j][k], mod - 2) % mod * p % mod;     }     dp[i][j][k] = p;     val[i][j][k] +=         dfs(n - 1, i + 1, j, k,             1LL * p * sp % mod * qmod(v + sp + sn, mod - 2) % mod, v, sp + 1, sn);     val[i][j][k] += dfs(n - 1, i, j + 1, k,                         1LL * p * sn % mod * qmod(v + sp + sn, mod - 2) % mod, v,                         sp, max(sn - 1, 0LL));     val[i][j][k] += dfs(n - 1, i, j, k + 1,                         1LL * p * v % mod * qmod(v + sp + sn, mod - 2) % mod,                         max(v + flag, 0LL), sp, sn);     val[i][j][k] %= mod;     vis[i][j][k] = 1;     return val[i][j][k];   }   int main() {     ios::sync_with_stdio(false);     long long sn = 0, sp = 0;     int n, m;     cin >> n >> m;     for (int i = 0; i < n; ++i) {       cin >> a[i];     }     for (int i = 0; i < n; ++i) {       cin >> w[i];       if (a[i]) {         sp += w[i];       } else         sn += w[i];     }     for (int i = 0; i < n; ++i) {       memset(dp, 0, sizeof dp);       memset(vis, 0, sizeof vis);       memset(val, 0, sizeof val);       if (a[i]) {         flag = 1;         sp -= w[i];       } else {         flag = -1;         sn -= w[i];       }       cout << dfs(m, 0, 0, 0, 1, w[i], sp, sn) << endl;       if (a[i]) {         sp += w[i];       } else         sn += w[i];     }     return 0;   }   