#include <bits/stdc++.h>
using namespace std;
#define N 200005
#define LL long long
#define lowbit(x) (x&(-x))

struct xx {
	int xi,yi;
	bool operator < (const xx &_) const {
		return xi < _.xi;
	}
} w[N];
const int mo = 998244353;
LL Pow[N],Cnt[N][5];

LL C[N],ed;
void Update(int idx) {
	while(idx <= ed) {
		C[idx] ++;
		idx += lowbit(idx);
	}
	return ;
}
LL Sum(int idx) {
	LL res = 0;
	while(idx > 0) {
		res += C[idx];
		idx -= lowbit(idx);
	}
	return res;
}

void Add(LL &res,LL x) {
	res = res+x >= mo? res+x-mo:res+x;
	return ;
}

int B[N];
int main() {
	int n;
	cin >> n;
	Pow[0] = 1;
	for(int i=1; i<=n; i++) Pow[i] = Pow[i-1]*2%mo;

	int tot = 0;
	for(int i=1; i<=n; i++) scanf("%d%d",&w[i].xi,&w[i].yi),B[++tot] = w[i].yi;
	sort(B+1,B+tot+1);
	ed = unique(B+1,B+tot+1)-B-1;
	for(int i=1; i<=n; i++) w[i].yi = lower_bound(B+1,B+ed+1,w[i].yi) - B;

	sort(w+1,w+n+1);

	for(int i=1; i<=n; i++) {
		Cnt[i][3] = Sum(w[i].yi);
		Cnt[i][2] = i-1-Cnt[i][3];
		Update(w[i].yi);
	}
	memset(C,0,sizeof(C));
	for(int i=n; i>=1; i--) {
		Cnt[i][4] = Sum(w[i].yi);
		Cnt[i][1] = n-i-Cnt[i][4];
		Update(w[i].yi);
	}
	LL Ans = 0;
	/*
		Case0: Me.

		Case1: 1.3.
		Case2: 2.4.

		Case3: 1.3.2
		Case4: 1.3.4

		Case5: 2.4.1
		Case6: 2.4.3

		Case7: 1.2.3.4
	*/
	for(int i=1; i<=n; i++) {
		Add(Ans,Pow[n-1]);
		LL C1 = Pow[Cnt[i][1]]-1,C2 = Pow[Cnt[i][2]]-1,C3 = Pow[Cnt[i][3]]-1,C4 = Pow[Cnt[i][4]]-1;

		Add(Ans,C1*C3%mo);
		Add(Ans,C2*C4%mo);

		Add(Ans,C1*C3%mo*C2%mo);
		Add(Ans,C1*C3%mo*C4%mo);

		Add(Ans,C2*C4%mo*C1%mo);
		Add(Ans,C2*C4%mo*C3%mo);

		Add(Ans,C1*C2%mo*C3%mo*C4%mo);
	}
	cout<<Ans;
	return 0;
}