/*                         _
                        _ooOoo_
                       o8888888o
                       88" . "88
                       (| -_- |)
                  .'  \\|     |//  `.
                 /  \\|||  :  |||//  \
                /  _||||| -:- |||||_  \
                |   | \\\  -  /'| |   |
                | \_|  `\`---'//  |_/ |
                \  .-\__ `-. -'__/-.  /
              ___`. .'  /--.--\  `. .'___
           ."" '<  `.___\_<|>_/___.' _> \"".
          | | :  `- \`. ;`. _/; .'/ /  .' ; |
          \  \ `-.   \_\_`. _.'_/_/  -' _.' /
===========`-.`___`-.__\ \___  /__.-'_.'_.-'================

                  Please give me AC.
*/
#include<bits/stdc++.h>
using namespace std;
#define mem(a) memset(a,0,sizeof(a))
//#define INF (~(1<<31))
#define inf 0x3f3f3f3f3f3f3f3f
#define eps 1e-8
#define PI 3.141592653589793238462643383
#define lowbit(x) ((x)&(-x))
#define sqr(x) ((x)*(x))
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define all(v) (v).begin(),(v).end()
#define dbg(x,y) cout<<(x)<<" = "<<(y)<< endl;
#define per(i,a,b) for(int i = a; i >= b; --i)
#define rep(i,a,b) for(int i = a; i <= b; ++i)
#define fi first
#define se second
#define ls (rt<<1)
#define rs (rt<<1|1)
#define ll long long
#define int ll
typedef bitset<2010> bt;
typedef unsigned long long ull;
typedef complex<double> comp;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;

const ll N = 2e5 + 7;
const ll M = 1e9 + 7;
const ll MAXN = 2e18 + 7;
const ll Mod = 998244353;
//const ll Mod = 1e9 + 7;

int _,i,j,k,n,m,p,s,T,t,l,r,o,u,v,w,x,y,z,ans,nex,sum,num,len,en,sx,sy,tx,ty,th,ma,mi,mod,cnt,la,op,res,flag,cas,bk,ret,mid,now,tmp,rt;
int a[N],b[N],c[N],d[N];
char ch;
vector<int> g[N],h;
string s1,s2,s3;

const int G=3,Gi=332748118;
int R[N];
ll pow(ll a,ll n)
{
    ll ret=1;
    while(n){
        if(n&1) ret=ret*a%Mod;
        a=a*a%Mod;
        n>>=1;
    }
    return ret%Mod;
}
void ntt(int *A,int n,int rev)
{
    for(int i = 0;i < n;i++)
        if(i < R[i]) swap(A[i],A[R[i]]);
    for(int mid = 1;mid < n;mid<<=1){
        ll wn=pow(rev==1? G:Gi,(Mod-1)/(mid<<1));
        for(int j = 0;j < n;j+=(mid<<1)){
            ll w=1;
            for(int k = 0;k < mid;k++,w=w*wn%Mod){
                int x=A[j+k],y=w*A[j+k+mid]%Mod;
                A[j+k]=(x+y)%Mod;
                A[j+k+mid]=(x-y+Mod)%Mod;
            }
        }
    }
}
int inv[N];
void get_inv(int n,int p){
	inv[0]=inv[1]=1;
	for (int i=2;i<n;i++){
		inv[i]=inv[p%i]*(p-p/i)%p;
	}
}
int C(int n,int m)
{
    return c[n]*d[m]%Mod*d[n-m]%Mod;
}

signed main()
{
    int T = 1;
    x=1;a[0]=1;
    get_inv(N,Mod);
    c[0]=1;
    for(i = 1;i < N;i++) c[i]=c[i-1]*i%Mod;
    d[0]=1;
    for(i = 1;i < N;i++) d[i]=d[i-1]*inv[i]%Mod;
    scanf("%lld",&T);
    while(T--){
        scanf("%lld%lld",&n,&m);
        for(i = 0;i <= 2*x+n-m-2;i++) b[i]=C(n+m,m+1-x+i);
        int L=0; p=1;
        while(p<=3*x+n-m-3) p<<=1,L++;
        for(i = 0;i < p;i++) R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
        ntt(a,p,1);ntt(b,p,1);
        for(i = 0;i < p;i++) a[i]=a[i]*b[i]%Mod;
        ntt(a,p,-1);
        //dbg(-1,a[0])
        ll inv=pow(p,Mod-2);
        for(i = 0;i < x+n-m;i++) a[i]=a[i+x-1]*inv%Mod,b[i]=0;
        for(i = x+n-m;i <= p;i++) a[i]=b[i]=0;
        x=x+n-m;
    }
    for(i = 0;i <= p;i++)
        ans=(ans+a[i])%Mod;
    printf("%lld\n",ans);
    return 0;
}




