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

typedef long long LL;

const int N=400,mod=998244353;

int add(int a,int b,int p=mod){return a+b>=p?a+b-p:a+b;}
int sub(int a,int b,int p=mod){return a-b<0?a-b+p:a-b;}
int mul(int a,int b,int p=mod){return (LL)a*b%p;}
void sadd(int &a,int b,int p=mod){a=add(a,b,p);}
void ssub(int &a,int b,int p=mod){a=sub(a,b,p);}
void smul(int &a,int b,int p=mod){a=mul(a,b,p);}

int n,a[N+9],b[N+9],sa,sb;

void into(){
  scanf("%d",&n);
  for (int i=1;i<=n;++i){
	scanf("%d%d",&a[i],&b[i]);
	sa+=a[i];sb+=b[i];
  }
}

int inv[N+9],fac[N+9],ifac[N+9];

void Get_inv(){
  inv[1]=1;
  fac[0]=fac[1]=1;
  ifac[0]=ifac[1]=1;
  for (int lim=max(sa,sb),i=2;i<=lim;++i){
	inv[i]=mul(mod-mod/i,inv[mod%i]);
	fac[i]=mul(fac[i-1],i);
	ifac[i]=mul(ifac[i-1],inv[i]);
  }
}

int dp[N+9][N+9],ans;

void Get_dp(){
  dp[0][0]=mod-1;
  for (int i=1;i<=n;++i)
	for (int j=sa;j>=a[i];--j)
	  for (int k=sb;k>=0;--k){
		int now=1;
		for (int t=0;t<b[i]&&t<=k;++t){
		  ssub(dp[j][k],mul(dp[j-a[i]][k-t],now));
		  smul(now,mul(inv[t+1],a[i]));
		}
	  }
  for (int i=1;i<=sa;++i){
	int now=1;
	for (int j=0;j<=sb;++j){
	  smul(now,inv[i]);
	  sadd(ans,mul(dp[i][j],mul(now,fac[j])));
	}
  }
}

void work(){
  Get_inv();
  Get_dp();
}

void outo(){
  printf("%d\n",mul(ans,sa));
}

int main(){
  into();
  work();
  outo();
  return 0;
}