inline ll __read() { ll x(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x * t; }
typedeflonglong ll; constint maxn = 110; constint mod = 998244353;
inlineint __read() { intx(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x * t; }
int a[maxn][maxn * 20], sum[maxn][maxn * 20]; int f[maxn][maxn * 20][maxn << 1], ans(1);
signedmain() { int n = __read(), m = __read(); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) sum[i][0] = (sum[i][0] + (a[i][j] = __read())) % mod; for (int j = 1; j <= m; ++j) sum[i][j] = (sum[i][0] - a[i][j] + mod) % mod; ans = 1ll * ans * (sum[i][0] + 1) % mod; } ans -= 1; for (int j = 1; j <= m; ++j) { f[0][j][n] = 1; for (int i = 1; i <= n; ++i) for (int k = n - i; k <= n + i; ++k) f[i][j][k] = (f[i - 1][j][k] + 1ll * f[i - 1][j][k - 1] * a[i][j] % mod + 1ll * sum[i][j] * f[i - 1][j][k + 1] % mod) % mod; for (int i = 1; i <= n; ++i) ans = (ans - f[n][j][n + i] + mod) % mod; } printf ("%lld\n", ans); system("pause"); }