#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
inline int read(){
	#define gc getchar
	int ans=0;
	char ch=gc();
	bool f=1;
	while(!isdigit(ch))f^=ch=='-',ch=gc();
	while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
	return f?ans:-ans;
	#undef gc
}
typedef long long ll;
typedef pair<int,int> pii;
const int mod=998244353;
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
inline void Add(int&a,const int&b){a=a+b>=mod?a+b-mod:a+b;}
inline void Dec(int&a,const int&b){a=a>=b?a-b:a-b+mod;}
inline void Mul(int&a,const int&b){a=(ll)a*b%mod;}
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=mul(a,a))if(p&1)Mul(ret,a);return ret;}
const int N=2e5+5;
int n,vx[N],sx=0,vy[N],sy=0,clu[N],cld[N],cru[N],crd[N],pw[N];
pii a[N];
int bit[N];
inline int lowbit(const int&x){return x&-x;}
inline void update(int x,int v){for(;x<=n;x+=lowbit(x))Add(bit[x],v);}
inline int query(int x){int ret=0;for(;x;x-=lowbit(x))Add(ret,bit[x]);return ret;}
inline int query(int l,int r){return dec(query(r),query(l-1));}
int main(){
	n=read();
	pw[0]=1;
	for(ri i=1;i<=n;++i)pw[i]=add(pw[i-1],pw[i-1]);
	for(ri i=1;i<=n;++i){
		vx[i]=a[i].fi=read();
		vy[i]=a[i].se=read();
	}
	sort(vy+1,vy+n+1),sort(a+1,a+n+1);
	for(ri i=1;i<=n;++i){
		a[i].se=lower_bound(vy+1,vy+n+1,a[i].se)-vy;
		clu[i]=query(1,a[i].se-1);
		cld[i]=query(a[i].se+1,n);
		update(a[i].se,1);
	}
	memset(bit,0,sizeof(bit));
	for(ri i=n;i;--i){
		cru[i]=query(1,a[i].se-1);
		crd[i]=query(a[i].se+1,n);
		update(a[i].se,1);
	}
	int ans=0;
	for(ri i=1;i<=n;++i){
		int t=0;
		Add(t,pw[n-1]);
		Add(t,pw[n-1]);
		Dec(t,pw[clu[i]+cld[i]]);
		Dec(t,pw[cru[i]+crd[i]]);
		Dec(t,pw[clu[i]+cru[i]]);
		Dec(t,pw[cld[i]+crd[i]]);
		Add(t,pw[clu[i]]);
		Add(t,pw[cru[i]]);
		Add(t,pw[cld[i]]);
		Add(t,pw[crd[i]]);
		Add(ans,t-1);
	}
	cout<<ans;
	return 0;
}