#include <bits/stdc++.h>
using namespace std;

const int N = 410;
const int mod = 998244353;

typedef long long LL;

inline int Pow(int x, int y) {
    int res = 1;
    for (; y; y >>= 1, x = (LL)x * x % mod) if (y & 1) res = (LL)res * x % mod;
    return res;
}    

int dp[2][N][N][N], A[N], B[N], C[N][N];

int main() {
    int n, s = 0; scanf("%d", &n);
    for (int i = 1; i <= n; i++) scanf("%d%d", &A[i], &B[i]), s = (s + A[i]) % mod;
    for (int i = 0; i <= 400; i++) {
        C[i][0] = 1;
        for (int j = 1; j <= i; j++) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
    }
    for (int i = 1, t = 0, t1 = 0; i <= n; t += B[i] - 1, t1 += A[i], i++) 
        for (int j = 0; j <= t; j++) 
            for (int k = 0; k <= t1; k++) {
                dp[0][i][j][k] = (dp[0][i][j][k] + dp[0][i - 1][j][k]) % mod;
                dp[1][i][j][k] = (dp[1][i][j][k] + dp[1][i - 1][j][k]) % mod;
                int p = (LL)k * Pow(k + A[i], mod - 2) % mod, p1 = Pow(p, j);
                for (int l = 0; l < B[i]; l++) {
                    int w = (LL)C[j + l][j] * p1 % mod * Pow(1 + mod - p, l) % mod;
                    dp[0][i][j + l][k + A[i]] = (dp[0][i][j + l][k + A[i]] + (LL)dp[1][i - 1][j][k] * w) % mod;
                    dp[1][i][j + l][k + A[i]] = (dp[1][i][j + l][k + A[i]] + (LL)dp[0][i - 1][j][k] * w) % mod;
                    if (k == 0 && j == 0) dp[1][i][l][A[i]] = (dp[1][i][j + l][A[i]] + w) % mod;
                }
            }
    int ans = 0;
    for (int t = 0; t <= 1; t++) 
        for (int j = 0; j <= 400; j++)
            for (int k = 0; k <= 400; k++) {
            	int w = (LL)dp[t][n][j][k] * s % mod * Pow(k, mod - 2) % mod;
            	if (t & 1) ans = (ans + w) % mod;
				else ans = (ans - w + mod) % mod; 
			}
    printf("%d\n", ans);
    return 0;    
}
