#include <bits/stdc++.h>
#define MOD 998244353

struct SegTree {
	std::vector<int> data;
	int n;
	SegTree(int n_) {
		for (n = 1; n < n_; n *= 2);
		data.resize(2 * n);
	}
	void add(int i, int val) {
		for (i += n; i; i >>= 1) data[i] += val;
	}
	int sum(int l, int r) {
		int res = 0;
		for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
			if (r & 1) r--, res += data[r];
			if (l & 1) res += data[l], l++;
		}
		return res;
	}
};

int ri() {
	int n;
	scanf("%d", &n);
	return n;
}

struct Point {
	int x;
	int y;
	int id;
	int y_comped;
};

int main() {
	int n = ri();
	Point a[n];
	for (int i = 0; i < n; i++) a[i].x = ri(), a[i].y = ri(), a[i].id = i;
	
	int b2[n + 3];
	b2[0] = 1;
	for (int i = 1; i <= n + 2; i++) {
		b2[i] = b2[i - 1] + b2[i - 1];
		if (b2[i] >= MOD) b2[i] -= MOD;
	}
	
	std::sort(a, a + n, [](const Point &a, const Point &b) { return a.y < b.y; });
	int cnt = 0;
	for (auto &i : a) i.y_comped = cnt++;
	std::sort(a, a + n, [](const Point &a, const Point &b) { return a.x < b.x; });
	
	SegTree tree(cnt);
	
	uint64_t res = 0;
	for (int i = 0; i < n; i++) {
		int v = tree.sum(0, a[i].y_comped);
		res += b2[v];
		res += b2[i - v];
		res += b2[a[i].y_comped - v];
		res += b2[n - a[i].y_comped - 1 - i + v];
		
		tree.add(a[i].y_comped, 1);
	}
	res += (uint64_t) (b2[n] - 1) * n;
	res -= b2[n + 2] - 4;
	std::cout << res % MOD << std::endl;
	
	return 0;
}
