#include "bits/stdc++.h"
 
typedef long long ll;
#define int ll
#define fi first
#define se second
#define SORT(a) sort(a.begin(),a.end())
#define rep(i,n) for(int i = 0;i < (n) ; i++) 
#define REP(i,n) for(int i = 0;i < (n) ; i++) 
#define MP(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define INF LLONG_MAX/2
#define all(x) (x).begin(),(x).end()
#define debug(x) cerr<<#x<<": "<<x<<endl
#define debug_vec(v) cerr<<#v<<":";rep(i,v.size())cerr<<" "<<v[i];cerr<<endl
using namespace std;
int MOD = 998244353;
template <class T>
class SegTree {
    int n;// 葉の数
    vector<T> data;// データを格納するvector
    T def;// 初期値かつ単位元
    function<T(T, T)> operation;// 区間クエリで使う処理
    function<T(T, T)> update;// 点更新で使う処理

    // 区間[a,b)の総和。ノードk=[l,r)に着目している。
    T _query(int a, int b, int k, int l, int r) {
        if (r <= a || b <= l) return def; // 交差しない
        if (a <= l && r <= b)
            return data[k]; // a,l,r,bの順で完全に含まれる
        else {
            T c1 = _query(a, b, 2 * k + 1, l, (l + r) / 2); // 左の子
            T c2 = _query(a, b, 2 * k + 2, (l + r) / 2, r); // 右の子
            return operation(c1, c2);
        }
    }

    public:
    // _n:必要サイズ, _def:初期値かつ単位元, _operation:クエリ関数,
    // _update:更新関数
    SegTree(size_t _n, T _def, function<T(T, T)> _operation,
            function<T(T, T)> _update)
        : def(_def), operation(_operation), update(_update) {
        n = 1;
        while (n < _n) {
            n *= 2;
        }
        data = vector<T>(2 * n - 1, def);
    }

    // 場所i(0-indexed)の値をxで更新
    void change(int i, T x) {
        i += n - 1;
        data[i] = update(data[i], x);
        while (i > 0) {
            i = (i - 1) / 2;
            data[i] = operation(data[i * 2 + 1], data[i * 2 + 2]);
        }
    }

    // [a, b)の区間クエリを実行
    T query(int a, int b) {
        return _query(a, b, 0, 0, n);
    }

    // 添字でアクセス
    T operator[](int i) {
        return data[i + n - 1];
    }
};
int k[4][200010] = {0};

ll bitpow(ll x,ll n){
    ll ans = 1;
    while(n > 0){
        if(n%2 == 1) ans = ans * x % MOD;
        x = x * x %MOD;
        n = n >> 1;
    }
    return ans;
}
signed main(){
    int n;
    cin >> n;
    vector<pair<int,int>> p(n);
    vector<pair<int,int>> a(n);
    vector<pair<int,int>> b(n);

    rep(i,n){
        int aa,bb;
        cin >> aa >> bb;
        a[i] = MP(aa,i);
        b[i] = MP(bb,i);
        p[i] = MP(0,0);
    }
    SORT(a);
    SORT(b);
    rep(i,n){
        p[a[i].se].fi = i;
        p[b[i].se].se = i;
    }
    // rep(i,n)cerr << p[i].fi << " " << p[i].se << endls
    SORT(p);


    SegTree<int> st1(n, 0,
                          [](int a, int b) { return a+b; },
                          [](int a, int b) { return b; });
    SegTree<int> st2(n, 0,
                          [](int a, int b) { return a+b; },
                          [](int a, int b) { return b; });

    rep(i,n){//左から  
        st1.change(p[i].se,1);
        int low = st1.query(0,p[i].se);
        k[1][i] = low;
        k[0][i] = i-low;
    }
    rep(i,n){//右から  
        st2.change(p[n-i-1].se,1);
        int low = st2.query(0,p[n-i-1].se);
        k[3][n-1-i] = low;
        k[2][n-1-i] = i-low;
    }

    // rep(i,n){
    //     cerr << k[0][i] << " " << k[1][i] << " " << k[2][i] << " " << k[3][i] << endl;
    // }

    int ans = 0;
    rep(i,n){
        ans++;
        ans%=MOD;
        int kk[4];
        kk[0] =  bitpow(2,k[0][i])-1;
        kk[1] =  bitpow(2,k[1][i])-1;
        kk[2] =  bitpow(2,k[3][i])-1;
        kk[3] =  bitpow(2,k[2][i])-1;
        rep(j,4){
            ans += kk[j];
            ans %= MOD;
        }
        rep(j,4){
            ans += (kk[j]*kk[(j+1)%4])%MOD;
            ans %= MOD;
        }
        rep(j,4){
            ans += (kk[j]*kk[(j+1)%4]%MOD*kk[(j+2)%4]*2)%MOD;
            ans %= MOD;
        }
        rep(j,2){
            ans += kk[j]*kk[(j+2)%4]*2%MOD;
            ans %= MOD;
        }
        ans += kk[0]*kk[1]%MOD*kk[2]%MOD*kk[3]*2%MOD;
        ans %= MOD;
        // cerr << ans << endl;
    }
    cout << ans << endl;


    
    return 0;
}

// g++ -std=c++14 code1.cpp
// rm -r -f test;oj dl https://cf17-final-open.contest.atcoder.jp/tasks/cf17_final_a
// rm -r -f test;oj dl http://abc136.contest.atcoder.jp/tasks/abc136_b


Measured memory_bytes: 24064