#include "bits/stdc++.h"
using namespace std;
using ll = long long;
ll n;
const ll mod=998244353;
vector<pair<int,int>> vt;  //存输入 
stack<pair<int,int>> stk;   //将不覆盖的点入栈 ，用栈优化（对于正在检测的点，如果栈顶不满足，则栈里面的都不满足） 
//存点的坐标（identifier）和扫描到这个点时，它满足的集合数量 
int t1,t2;
int main()
{
	//freopen("input.txt","r",stdin);
	ios::sync_with_stdio(false);cin.tie(0);
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>t1>>t2;
		t2+=t1;
		vt.emplace_back(t1,t2);
	}
	sort(vt.rbegin(),vt.rend());  //这种题目几乎都要sort 此处逆序遍历 
	for(int i=0;i<n;i++)
	{
		ll t=1;
		//cout<<stk.empty()<<endl;
		while(!stk.empty() && vt[i].second>stk.top().first)		//遍历栈 注意开区间 
		{
			t=(t*stk.top().second)%mod;
			stk.pop();
			
		}
		//cout<<t<<endl;
		stk.push(make_pair(vt[i].first,t+1));   //!!!!! 一定要加1，因为枚举集合数的时候，对于每个点分两种情况（激活和不激活） 
	} 
	ll ans=1;
	while(!stk.empty())
	{
		ans=(ans*stk.top().second)%mod;
		stk.pop();
		//cout<<ans<<endl;
	}
	cout<<ans%mod<<endl;
	return 0;
} 