#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;

const int N=4e2+5;
const int mod=998244353;
int n,Sa,Sb,tmp,ans,a[N],b[N],fac[N],inv[N],dp[N][N][N];

inline int mul(int x,int y) {return 1ll*x*y%mod;}
inline int add(int x,int y) {x+=y;if(x>=mod) x-=mod;return x;}
inline int modpow(int x,int y,int res=1) {
	for(;y;y>>=1,x=mul(x,x)) if(y&1) res=mul(res,x);
	return res;
}
inline void inc(int&x,int y) {x=add(x,y);}
template <typename _Tp> inline void IN(_Tp&x) {
	char ch;bool flag=0;x=0;
	while(ch=getchar(),!isdigit(ch)) if(ch=='-') flag=1;
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	if(flag) x=-x;
}

int main() {
	IN(n),fac[0]=inv[0]=1;
	for(int i=1;i<=n;++i) IN(a[i]),Sa+=a[i],IN(b[i]),Sb+=b[i];
	for(int i=1;i<N;++i) fac[i]=mul(fac[i-1],i),inv[i]=modpow(fac[i],mod-2);
	dp[0][0][0]=mod-1;
	for(int i=1;i<=n;++i) for(int j=0;j<=Sa;++j) for(int k=0;k<=Sb;++k) {
		if(!dp[i-1][j][k]) continue;
		inc(dp[i][j][k],dp[i-1][j][k]),tmp=1;
		for(int c=0;c<b[i];++c,tmp=mul(tmp,a[i]))
			inc(dp[i][j+a[i]][k+c],mod-mul(tmp,mul(inv[c],dp[i-1][j][k])));
	}
	for(int i=1;i<=Sa;++i) {
		int res=modpow(i,mod-2);tmp=mul(Sa,res);
		for(int j=0;j<=Sb;++j,tmp=mul(tmp,res)) inc(ans,mul(dp[n][i][j],mul(tmp,fac[j])));
	}
	printf("%d\n",ans);
	return 0;
}