#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
int read();
void Add(int &x, int y) { (x += y) >= mod ? x -= mod : x; }
int fsp(long long bs, int p) {
    int rt = 1;
    while (p) {
        if (p & 1) rt = bs * rt % mod;
        bs = bs * bs % mod, p >>= 1;
    }
    return rt;
}
int n;
int a[502], b[502], sa, sb;
int fac[502], caf[502], lim = 500;
void init() {
    fac[0] = 1;
    for (int i = 1; i <= lim; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;
    caf[lim] = fsp(fac[lim], mod - 2);
    for (int i = lim; i >= 1; --i) caf[i - 1] = 1ll * caf[i] * i % mod;
}

int f[502][502], g[502][502];
int main() {
    n = read();
    for (int i = 1; i <= n; ++i) sa += (a[i] = read()), sb += (b[i] = read());
    init();
    g[0][0] = 1;
    for (int i = 1; i <= n; ++i) {
        int p = 1ll * a[i] * fsp(sa, mod - 2) % mod;
        for (int j = 0; j <= sa; ++j)
            for (int k = 0; k <= sb; ++k) f[j][k] = 0;
        for (int j = 0; j <= sa; ++j)
            for (int k = 0, x, tmp; k <= sb; ++k) {
                if (!(x = g[j][k])) continue;
                Add(f[j + a[i]][k], x), tmp = mod - x;
                for (int t = 0; t < b[i]; ++t, tmp = 1ll * tmp * p % mod)
                    Add(f[j][k + t], 1ll * tmp * caf[t] % mod);
            }
        swap(f, g);
    }
    int res = 0;
    for (int i = 0; i < sa; ++i) {
        int p = 1ll * sa * fsp(sa - i, mod - 2) % mod, tmp = p;
        for (int j = 0; j <= sb; ++j, tmp = 1ll * tmp * p % mod)
            Add(res, 1ll * g[i][j] * fac[j] % mod * tmp % mod);
    }
    printf("%d\n", mod - res);
    return 0;
}
const int _SIZE = 1 << 22;
char ibuf[_SIZE], *iS = ibuf, *iT = ibuf;
#define gc                                                         \
    (iS == iT ? iT = ((iS = ibuf) + fread(ibuf, 1, _SIZE, stdin)), \
     (iS == iT ? EOF : *iS++) : *iS++)
int read() {
    int x = 0, f = 1;
    char c = gc;
    while (!isdigit(c)) f = (c == '-') ? -1 : f, c = gc;
    while (isdigit(c)) x = x * 10 + c - '0', c = gc;
    return x * f;
}