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

#define MOD 998244353

int X[200005], Y[200005], BIT[400005][2];
long long two[200005];

map<int, int> M;
vector< pair<int, int> > Z;

void update(int i, int j, int val)
{
    for(; i<=400000; i+= (i&(-i)))
        BIT[i][j] += val;
}

int query(int i, int j)
{
    int ans = 0;

    for(; i>0; i-= (i&(-i)))
        ans += BIT[i][j];

    return ans;
}

int main() {

    ios::sync_with_stdio(0);
    cin.tie(NULL), cout.tie(NULL);

    int N;
    cin >> N;

    two[0] = 1;

    for(int i=1; i<=N; i++)
    {
        int x, y;
        cin >> x >> y;

        M[x], M[y];
        Z.push_back({x, y});
        two[i] = two[i-1] * 2 % MOD;
    }

    int k = 0;
    sort(Z.begin(), Z.end());

    for(auto &it : M)
        it.second = ++k;
    
    for(int i=1; i<=N; i++)
    {
        X[i] = M[ Z[i-1].first ], Y[i] = M[ Z[i-1].second ];
        update(Y[i], 1, 1);
    }

    long long ans = 0;

    for(int i=1; i<=N; i++)
    {
        update(Y[i], 1, -1);

        int left = i - 1, right = N - i;
        int left_down = query(Y[i], 0);
        int right_down = query(Y[i], 1);
        int left_up = left - left_down;
        int right_up = right - right_down;

        ans += two[N] - 1;
        ans += MOD - two[left] + 1;
        ans += MOD - two[right] + 1;
        ans += MOD - (two[left_up] - 1) * (two[right_up] - 1) % MOD;
        ans += MOD - (two[left_down] - 1) * (two[right_down] - 1) % MOD;

        update(Y[i], 0, 1);
    }

    cout << ans % MOD << "\n";
    return 0;
}
