#include using namespace std; using ll = long long;//int型は使わない #define rep(i,a,b) for(ll i=(ll)a; i<(ll)b; i++) #define rrep(i,a,b) for(ll i=(ll)b-1; i>=(ll)a; i--) #define all(vec1) (vec1).begin(), (vec1).end() #include #include using namespace atcoder; using mint = modint998244353; mint op(mint a, mint b) { return a + b; } mint e() { return 0; } mint mapping (mint f, mint x) { return f * x; } mint composition(mint f, mint g) { return f * g; } mint id() { return 1; } int main() { mint f34 = mint(3) / mint(4); mint f43 = 1 / f34; int N; cin >> N; vector X(N), Y(N); rep(i,0,N) cin >> X[i] >> Y[i]; mint ans = 0; rep(_,0,2) { //Xの値でソート vector> P(N); rep(i,0,N) P[i] = {X[i], Y[i]}; sort(all(P)); rep(i,0,N) X[i] = P[i].first, Y[i] = P[i].second; //id vector Id(N); rep(i,0,N) Id[i] = i; sort(all(Id), [&](ll i, ll j) -> bool { return Y[i] != Y[j] ? Y[i] < Y[j] : i < j; }); vector rId(N); rep(i,0,N) rId[Id[i]] = i; vector V(N, 1); V[0] = mint(1) / 4; rep(i,1,N) V[i] = V[i-1] * f34; lazy_segtree seg(V); mint fs = f34.pow(N); rep(i,0,N-1) { fs *= f43; seg.set(rId[i], mint(0)); seg.apply(0, rId[i], f34); seg.apply(rId[i] + 1, N, f43); ans += (mint(1) - seg.all_prod() - fs) * (X[i+1] - X[i]); } swap(X,Y); } rep(i,0,N) ans *= 4; cout << (ans * 2).val() << endl; return 0; }