#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
const int N = 405, mod = 998244353;
int read() {
	int x = 0, f = 1; char ch;
	while(! isdigit(ch = getchar())) (ch == '-') && (f = -f);
	for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 3) + (x << 1) + (ch ^ 48));
	return x * f;
}
template <class T> T Max(T a, T b) { return a > b ? a : b; }
template <class T> T Min(T a, T b) { return a < b ? a : b; }
int n, Sa, Sb, a[N], b[N], A[N][N], inv[N], fac[N], f[N][N][N];
int ksm(int x, int y) {
	int res = 1;
	for( ; y; x = x * x % mod, y >>= 1) {
		if(y & 1) res = res * x % mod;
	}
	return res;
}
signed main() {
	n = read(); f[0][0][0] = -1; fac[0] = 1;
	for(int i = 1; i <= n; ++ i) Sa += (a[i] = read()), Sb += (b[i] = read());
	for(int i = 1; i <= Sb; ++ i) fac[i] = fac[i - 1] * i % mod;
	inv[Sb] = ksm(fac[Sb], mod - 2);
	for(int i = Sb - 1; ~i; -- i) inv[i] = inv[i + 1] * (i + 1) % mod;
	for(int i = 1; i <= n; ++ i) for(int j = 0; j <= Sb; ++ j) A[i][j] = (j == 0) ? 1 : A[i][j - 1] * a[i] % mod;
	for(int i = 1; i <= n; ++ i) 
		for(int j = 0; j <= Sa; ++ j) 
			for(int k = 0; k <= Sb; ++ k) {
				f[i][j][k] = f[i - 1][j][k];
				for(int l = 0; l < b[i]; ++ l) if(j >= a[i] && k >= l) f[i][j][k] = ((f[i][j][k] - f[i - 1][j - a[i]][k - l] * A[i][l] % mod * inv[l] % mod) % mod + mod) % mod;
			}
	int ans = 0;
	for(int i = 0; i <= Sa; ++ i) for(int j = 0; j <= Sb; ++ j) ans = (ans + Sa * ksm(ksm(i, mod - 2), j + 1) % mod * f[n][i][j] % mod * fac[j] % mod) % mod;
	cout << ans << endl;
	return 0;
}
