#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

const int MOD = 998244353;

int add(int a, int b){
    return (a+b)%MOD;
}

int mul(int a, int b){
    return ((ll)a*b)%MOD;
}

int pw(int a, int b){
    if(b == 0) return 1;
    int res = pw(a, b/2);
    res = mul(res, res);
    if(b%2) res = mul(res, a);
    return res;
}

pair <ll, ll> niz[200005];
map <ll, ll> u;
ll bit[200005];

void addbit(int x){
    while(x <= 200000){
        bit[x]++;
        x += x & -x;
    }
}

int getbit(int x){
    int res = 0;
    while(x){
        res += bit[x];
        x -= x & -x;
    }
    return res;
}

int main(){
    ios_base::sync_with_stdio(false);
    cout.precision(10);
    cout<<fixed;

    int n;
    cin >> n;
    vector <ll> vec;
    for(int i=1; i<=n; i++){
        cin >> niz[i].first >> niz[i].second;
        vec.push_back(niz[i].second);
    }
    sort(vec.begin(), vec.end());
    int cnt = 0;
    for(auto c : vec){
        if(!u[c]) u[c] = ++cnt;
    }
    sort(niz+1, niz+1+n);
    ll res = mul(n, pw(2, n));
    for(int i=1; i<=n; i++){
        niz[i].second = u[niz[i].second];
        res = add(res, MOD - pw(2, i-1));
        res = add(res, MOD - pw(2, n-i));
        res = add(res, MOD - pw(2, niz[i].second-1));
        res = add(res, MOD - pw(2, n-niz[i].second));
        int k = getbit(niz[i].second-1);
        res = add(res, pw(2, k));
        res = add(res, pw(2, i-1-k));
        res = add(res, pw(2, niz[i].second-1-k));
        res = add(res, pw(2, (n-niz[i].second) - (i-1-k)));
        res = add(res, MOD-1);
        addbit(niz[i].second);
    }
    cout << res;
    return 0;
}
