#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 998244353;
int mul(int x, int y) {
return (ll) x * y % MOD;
}
int add(int x, int y) {
x += y;
if (x >= MOD) x -= MOD;
return x;
}
int sub(int x, int y) {
x -= y;
if (x < 0) x += MOD;
return x;
}
int fast(int x, ll y = MOD - 2) {
int res = 1;
for ( ; y > 0; y >>= 1, x = mul(x, x)) {
if (y & 1) {
res = mul(res, x);
}
}
return res;
}
const int MX = 5e6 + 9;
int pw[MX];
void init() {
pw[0] = 1;
for (int i = 1; i < MX; i++) {
pw[i] = mul(pw[i - 1], 2);
}
}
#define x first
#define y second
using pii = pair<int, int>;
int cross(pii a, pii b) {
return a.x * b.y - b.x * a.y;
}
void solve() {
int n;
cin >> n;
vector<pii> p(n);
for (int i = 0; i < n; i++) {
cin >> p[i].x >> p[i].y;
++p[i].x;
++p[i].y;
}
int area = 0;
for (int i = 0, j = 1; i < n; i++, j++, j -= (j < n ? 0 : n)) {
area += cross(p[i], p[j]);
}
if (area < 0) {
reverse (p.begin(), p.end());
}
const int N = 2e3 + 9;
vector<vector<int>> vis(N, vector<int>(N));
const vector<int> dx = {-1, 0, 1, 0};
const vector<int> dy = {0, -1, 0, 1};
vector<pii> layer;
for (int i = 0, j = 1; i < n; i++, j++, j -= (j < n ? 0 : n)) {
if (p[i].x == p[j].x) {
if (p[i].y < p[j].y) {
for (int k = p[i].y; k <= p[j].y; k++) {
if (k != p[j].y) {
layer.push_back({p[i].x, k});
}
vis[p[i].x + 1][k] = 1;
}
} else {
for (int k = p[i].y; k >= p[j].y; k--) {
if (k != p[j].y) {
layer.push_back({p[i].x, k});
}
vis[p[i].x - 1][k] = 1;
}
}
} else {
if (p[i].x < p[j].x) {
for (int k = p[i].x; k <= p[j].x; k++) {
if (k != p[j].x) {
layer.push_back({k, p[i].y});
}
vis[k][p[i].y - 1] = 1;
}
} else {
for (int k = p[i].x; k >= p[j].x; k--) {
if (k != p[j].x) {
layer.push_back({k, p[i].y});
}
vis[k][p[i].y + 1] = 1;
}
}
}
}
for (auto [x, y] : layer) {
vis[x][y] = 1;
}
vector<int> cnt(MX);
for (int k = 0; layer.size() > 0; k++) {
cnt[k] = layer.size();
vector<pii> nw;
for (auto [x, y] : layer) {
for (int d = 0; d < 4; d++) {
int nx = x + dx[d], ny = y + dy[d];
if (vis[nx][ny]) {
continue;
}
vis[nx][ny] = 1;
nw.push_back({nx, ny});
}
}
swap(layer, nw);
}
int ans = 0;
for (int d = 1; d < MX; d++) {
cnt[d] += cnt[d - 1];
int res = sub(pw[cnt[d]], pw[cnt[d - 1]]);
ans = add(ans, mul(res, d));
}
ans = mul(ans, fast(pw[cnt[MX - 1]] - 1));
cout << ans << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
init();
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
/*
*/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKCmludCBtdWwoaW50IHgsIGludCB5KSB7CiAgICByZXR1cm4gKGxsKSB4ICogeSAlIE1PRDsKfQoKaW50IGFkZChpbnQgeCwgaW50IHkpIHsKICAgIHggKz0geTsKICAgIGlmICh4ID49IE1PRCkgeCAtPSBNT0Q7CiAgICByZXR1cm4geDsKfQoKaW50IHN1YihpbnQgeCwgaW50IHkpIHsKICAgIHggLT0geTsKICAgIGlmICh4IDwgMCkgeCArPSBNT0Q7CiAgICByZXR1cm4geDsKfQoKaW50IGZhc3QoaW50IHgsIGxsIHkgPSBNT0QgLSAyKSB7CiAgICBpbnQgcmVzID0gMTsKICAgIGZvciAoIDsgeSA+IDA7IHkgPj49IDEsIHggPSBtdWwoeCwgeCkpIHsKICAgICAgICBpZiAoeSAmIDEpIHsKICAgICAgICAgICAgcmVzID0gbXVsKHJlcywgeCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKfQoKY29uc3QgaW50IE1YID0gNWU2ICsgOTsKCmludCBwd1tNWF07Cgp2b2lkIGluaXQoKSB7CiAgICBwd1swXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IE1YOyBpKyspIHsKICAgICAgICBwd1tpXSA9IG11bChwd1tpIC0gMV0sIDIpOwogICAgfQp9CgojZGVmaW5lIHggZmlyc3QKI2RlZmluZSB5IHNlY29uZAoKdXNpbmcgcGlpID0gcGFpcjxpbnQsIGludD47CgppbnQgY3Jvc3MocGlpIGEsIHBpaSBiKSB7CiAgICByZXR1cm4gYS54ICogYi55IC0gYi54ICogYS55Owp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8cGlpPiBwKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gcFtpXS54ID4+IHBbaV0ueTsKICAgICAgICArK3BbaV0ueDsKICAgICAgICArK3BbaV0ueTsKICAgIH0KCiAgICBpbnQgYXJlYSA9IDA7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IDE7IGkgPCBuOyBpKyssIGorKywgaiAtPSAoaiA8IG4gPyAwIDogbikpIHsKICAgICAgICBhcmVhICs9IGNyb3NzKHBbaV0sIHBbal0pOwogICAgfQoKICAgIGlmIChhcmVhIDwgMCkgewogICAgICAgIHJldmVyc2UgKHAuYmVnaW4oKSwgcC5lbmQoKSk7CiAgICB9CgogICAgY29uc3QgaW50IE4gPSAyZTMgKyA5OwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2aXMoTiwgdmVjdG9yPGludD4oTikpOwoKICAgIGNvbnN0IHZlY3RvcjxpbnQ+IGR4ID0gey0xLCAwLCAxLCAwfTsKICAgIGNvbnN0IHZlY3RvcjxpbnQ+IGR5ID0gezAsIC0xLCAwLCAxfTsKCiAgICB2ZWN0b3I8cGlpPiBsYXllcjsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gMTsgaSA8IG47IGkrKywgaisrLCBqIC09IChqIDwgbiA/IDAgOiBuKSkgewogICAgICAgIGlmIChwW2ldLnggPT0gcFtqXS54KSB7CiAgICAgICAgICAgIGlmIChwW2ldLnkgPCBwW2pdLnkpIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBwW2ldLnk7IGsgPD0gcFtqXS55OyBrKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayAhPSBwW2pdLnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIucHVzaF9iYWNrKHtwW2ldLngsIGt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmlzW3BbaV0ueCArIDFdW2tdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBwW2ldLnk7IGsgPj0gcFtqXS55OyBrLS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayAhPSBwW2pdLnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIucHVzaF9iYWNrKHtwW2ldLngsIGt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmlzW3BbaV0ueCAtIDFdW2tdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChwW2ldLnggPCBwW2pdLngpIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBwW2ldLng7IGsgPD0gcFtqXS54OyBrKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayAhPSBwW2pdLngpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIucHVzaF9iYWNrKHtrLCBwW2ldLnl9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmlzW2tdW3BbaV0ueSAtIDFdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBwW2ldLng7IGsgPj0gcFtqXS54OyBrLS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayAhPSBwW2pdLngpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIucHVzaF9iYWNrKHtrLCBwW2ldLnl9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmlzW2tdW3BbaV0ueSArIDFdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGF1dG8gW3gsIHldIDogbGF5ZXIpIHsKICAgICAgICB2aXNbeF1beV0gPSAxOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGNudChNWCk7CiAgICBmb3IgKGludCBrID0gMDsgbGF5ZXIuc2l6ZSgpID4gMDsgaysrKSB7CiAgICAgICAgY250W2tdID0gbGF5ZXIuc2l6ZSgpOwogICAgICAgIHZlY3RvcjxwaWk+IG53OwogICAgICAgIGZvciAoYXV0byBbeCwgeV0gOiBsYXllcikgewogICAgICAgICAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykgewogICAgICAgICAgICAgICAgaW50IG54ID0geCArIGR4W2RdLCBueSA9IHkgKyBkeVtkXTsKICAgICAgICAgICAgICAgIGlmICh2aXNbbnhdW255XSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmlzW254XVtueV0gPSAxOwogICAgICAgICAgICAgICAgbncucHVzaF9iYWNrKHtueCwgbnl9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzd2FwKGxheWVyLCBudyk7CiAgICB9CgogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKGludCBkID0gMTsgZCA8IE1YOyBkKyspIHsKICAgICAgICBjbnRbZF0gKz0gY250W2QgLSAxXTsKICAgICAgICBpbnQgcmVzID0gc3ViKHB3W2NudFtkXV0sIHB3W2NudFtkIC0gMV1dKTsKICAgICAgICBhbnMgPSBhZGQoYW5zLCBtdWwocmVzLCBkKSk7CiAgICB9CgogICAgYW5zID0gbXVsKGFucywgZmFzdChwd1tjbnRbTVggLSAxXV0gLSAxKSk7CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW5pdCgpOwoKICAgIGludCB0ID0gMTsKLy8gICAgY2luID4+IHQ7CgogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8qCgoKCiov