#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, s, n) for (int i = s; i < (int)(n); i++)
#define all(obj) obj.begin(), obj.end()
#define debug(x) cerr << #x << ":" << x << "\n"
#define vdebug(vec) cerr << #vec << ":"; for (auto e : vec) cerr << e << " "; cout << "\n"
#define vvdebug(vv) cerr << #vv << ":\n"; for (auto vec : vv) { for (auto e : vec) cerr << e << " "; cerr << endl; }
#define YN(f) cout << (f ? "YES" : "NO") << endl
#define Yn(f) cout << (f ? "Yes" : "No") << endl
#define yn(f) cout << (f ? "yes" : "no") << endl
using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using pii = pair<int, int>;

static int MOD = 998244353;

ll modadd(ll x, ll y) {
	ll xp = x % MOD;
	if (x < 0) x += MOD;
	ll yp = y % MOD;
	if (y < 0) y += MOD;
	return (x + y) % MOD;
}

ll modsub(ll x, ll y) {
	return modadd(x, -y);
}

ll modmul(ll x, ll y) {
	return x * y % MOD;
}

// power(mod) x^n
ll modpow(ll x, ll n) {
	ll res = 1;
	while (n > 0) {
		if (n & 1) res = modmul(res, x);
		x = modmul(x, x);
		n >>= 1;
	}
	return res;
}

// inverse(mod) x^(-1)
ll inv(ll x) {
	return modpow(x, MOD - 2);
}

ll moddiv(ll x, ll y) {
	return modmul(x, inv(y));
}

// factorial(mod) n!
ll fact(ll n) {
	ll res = 1;
	while (n > 1) {
		res = modmul(res, n);
		n--;
	}
	return res;
}

// permutation(mod) nPr
ll permu(ll n, ll r) {
	if (r < 0 || n < r) return 0;
	else {
		ll res = fact(n);
		res = moddiv(res, fact(n - r));
		return res;
	}
}

// nPr(mod) (O(r))
ll mypermu(ll n, ll r) {
	if (r < 0 || n < r) return 0;
	else {
		ll res = 1;
		for (ll i = 0; i < r; i++) {
			res = modmul(res, n - i);
		}
		return res;
	}
}

// combination(mod) nCr
ll combi(ll n, ll r) {
	ll res = permu(n, r);
	res = moddiv(res, fact(r));
	return res;	
}

// nCr(mod) (O(r))
ll mycombi(ll n, ll r) {
	ll res = moddiv(permu(n, r), permu(r, r));
	return res;
}

// BIT
// ※節点の番号は1-indで[1, n]とする
const int MAX_N = 200000;
int N;
vi bit(MAX_N + 1);

int sum(int i) { // 番号の範囲[1, i]の節点の値の和
	int res = 0;
	while (i > 0) {
		res += bit.at(i);
		i -= i & -i;
	}
	return res;
}

void add(int i, int x) { // 番号iの節点の値にxを加える
	while (i <= N) {
		bit.at(i) += x;
		i += i & -i;
	}
}

int main () {
	cin >> N;
	vector<pii> p;
	rep(i, N) {
		int x, y; cin >> x >> y;
		pii pi(x, y);
		p.push_back(pi);
	}
	sort(all(p), [](pii p1, pii p2) { return p1.second < p2.second; }); // yでソート
	map<int, int> y2i;
	rep2(i, 1, N + 1) y2i[p.at(i - 1).second] = i; // y座標圧縮(1~N)
	// for (pii p : y2i) cout << p.first << " -> " << p.second << endl;
	sort(all(p)); // xでソート

	vvi A(4, vi(N + 1)); // A[q][j]:x座標がj番目(1-ind)に小さい頂点を原点とする座標系で第(q+1)象限にある頂点の個数
	rep2(j, 1, N + 1) { // j:圧縮後のx座標(1~N)
		// cout << "(" << p.at(j - 1).first << ", " << p.at(j - 1).second << ")" << endl;
		int i = y2i.at(p.at(j - 1).second); // i:圧縮後のy座標(1~N)
		// debug(j); debug(i);
		A.at(2).at(j) = sum(i); // xがより小さく，yもより小さいものの個数
		A.at(1).at(j) = (j - 1) - A.at(2).at(j); // xがより小さく，yはより大きいものの個数
		add(i, 1);
		// rep(i, N + 1) cout << bit.at(i) << " "; cout << endl;
	}
	// rep(i, N + 1) cout << bit.at(i) << " "; cout << endl;	
	// vvdebug(A);
	rep(i, N + 1) bit.at(i) = 0; // BITを0で初期化（もう1周する）
	for (int j = N; j > 0; j--) {// 圧縮後のx座標がj(1-ind)である頂点(j:N->1)
		// cout << "(" << p.at(j - 1).first << ", " << p.at(j - 1).second << ")" << endl;
		int i = y2i.at(p.at(j - 1).second); // i:圧縮後のy座標(1~N)
		// debug(j); debug(i);
		A.at(3).at(j) = sum(i); // xがより大きく，yはより小さいものの個数
		A.at(0).at(j) = (N - j) - A.at(3).at(j); // xがより大きく，yもより大きいものの個数
		add(i, 1);
		// rep(i, N + 1) cout << bit.at(i) << " "; cout << endl;
	}
	// rep(i, N + 1) cout << bit.at(i) << " "; cout << endl;
	// vvdebug(A);
	ll ans = 0;
	rep2(j, 1, N + 1) {
		ll a = modpow(2, A.at(0).at(j));
		ll b = modpow(2, A.at(1).at(j));
		ll c = modpow(2, A.at(2).at(j));
		ll d = modpow(2, A.at(3).at(j));
		// debug (j); debug(a); debug(b); debug(c); debug(d);		
		ans = modadd(ans, modmul(modmul(a, b), modmul(c, d)));
		ans = modadd(ans, modmul(modmul(a - 1, b - 1), modmul(c - 1, d - 1)));
		ans = modadd(ans, modmul(modmul(a - 1, b - 1), modmul(c - 1, 1)));
		ans = modadd(ans, modmul(modmul(a - 1, b - 1), modmul(1, d - 1)));
		ans = modadd(ans, modmul(modmul(a - 1, 1), modmul(c - 1, d - 1)));
		ans = modadd(ans, modmul(modmul(1, b - 1), modmul(c - 1, d - 1)));
		ans = modadd(ans, modmul(modmul(a - 1, 1), modmul(c - 1, 1)));
		ans = modadd(ans, modmul(modmul(1, b - 1), modmul(1, d - 1)));
		// debug(ans);
	}

	cout << ans << endl;
}

Measured memory_bytes: 15856