#include <cstdio>

typedef long long LL;
const int Mod = 998244353;
const int MN = 405;

inline int qPow(int b, int e) {
	int a = 1;
	for (; e; e >>= 1, b = (LL)b * b % Mod)
		if (e & 1) a = (LL)a * b % Mod;
	return a;
}

int Fac[MN], iFac[MN];
void Init(int N) {
	Fac[0] = 1;
	for (int i = 1; i <= N; ++i) Fac[i] = (LL)Fac[i - 1] * i % Mod;
	iFac[N] = qPow(Fac[N], Mod - 2);
	for (int i = N; i >= 1; --i) iFac[i - 1] = (LL)iFac[i] * i % Mod;
}

int N, A[MN], B[MN], SA, SB;
int f[MN][MN], g[MN][MN], Ans;

int main() {
	scanf("%d", &N);
	for (int i = 1; i <= N; ++i)
		scanf("%d%d", &A[i], &B[i]),
		SA += A[i], SB += B[i] - 1;
	Init(SB);
	SA = SB = 0;
	f[0][0] = Mod - 1;
	for (int i = 1; i <= N; ++i) {
		for (int j = 0; j <= SA + A[i]; ++j)
			for (int k = 0; k <= SB + B[i] - 1; ++k)
				g[j][k] = 0;
		for (int j = 0; j <= SA; ++j) {
			int *G = g[j + A[i]];
			for (int k = 0; k <= SB; ++k)
				for (int x = 0, c = 1; x < B[i]; ++x, c = (LL)c * A[i] % Mod)
					G[k + x] = (G[k + x] + (LL)c * iFac[x] % Mod * f[j][k]) % Mod;
		}
		SA += A[i], SB += B[i] - 1;
		for (int j = 0; j <= SA; ++j)
			for (int k = 0; k <= SB; ++k) {
				f[j][k] -= g[j][k];
				f[j][k] += (f[j][k] >> 31) & Mod;
			}
	}
	for (int j = 1; j <= SA; ++j) {
		int v = qPow(j, Mod - 2);
		int c = (LL)SA * v % Mod;
		for (int k = 0; k <= SB; ++k, c = (LL)c * v % Mod)
			Ans = (Ans + (LL)Fac[k] * c % Mod * f[j][k]) % Mod;
	}
	printf("%d\n", Ans);
	return 0;
}