/*
 * Author       : YangDavid
 * Created Time : 2019年09月23日 星期一 00时16分59秒
 */

#include<bits/stdc++.h>
#define rep(i, n) for(int i = 1; i <= n; ++i)
#define eprintf(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int maxn = 410, MOD = 998244353;
int add(int x, int y) { return x+y>=MOD ? x+y-MOD : x+y; }
int sub(int x, int y) { return x-y<0 ? x-y+MOD : x-y; }
int mul(int x, int y) { return 1LL * x * y % MOD; }
int qpow(int x, int y) {
    int ret = 1;
    for(; y; y >>= 1, x = mul(x, x))
        if(y & 1) ret = mul(ret, x);
    return ret;
}
int inv(int x) { return qpow(x, MOD - 2); }
void subn(int &x, int y) {
    x -= y;
    if(x < 0) x += MOD;
}

int n, a[maxn], b[maxn], dp[maxn][maxn], fac[maxn], ifac[maxn];
int main() {
    fac[0] = ifac[0] = 1;
    for(int i = 1; i <= 406; ++i) {
        fac[i] = mul(fac[i - 1], i);
        ifac[i] = inv(fac[i]);
    }
    scanf("%d", &n);
    rep(i, n) scanf("%d%d", &a[i], &b[i]);
    
    dp[0][0] = MOD-1;
    int sumA = 0, sumX = 0;
    for(int i = 1; i <= n; ++i) {
        sumA += a[i], sumX += b[i];
        for(int sa = sumA; sa >= a[i]; --sa) {
            for(int sx = 0; sx <= sumX; ++sx) {
                int factor = 1;
                for(int x = 0; x <= min(sx,b[i]-1); ++x) {
                    subn(dp[sa][sx], mul(mul(factor,dp[sa-a[i]][sx-x]), ifac[x]));
                    factor = mul(factor, a[i]);
                }
            }
        }
    }
    int ans = 0;
    for(int i = 1; i <= sumA; ++i) {
        int ifactor = 1, invi = inv(i);
        for(int j = 0; j < sumX; ++j) {
            ifactor = mul(ifactor, invi);
            ans = add(ans, mul(dp[i][j], mul(fac[j], ifactor)));
        }
    }
    printf("%d\n", mul(ans, sumA));

    return 0;
}
