#include using namespace std; using ll = long long; constexpr ll mod = 998244353; class BinaryIndexedTree { private: int n; vector data; public: BinaryIndexedTree(int n) : n(n), data(n + 1) {} void add(int k, ll x) { for (++k; k <= n; k += k & -k) (data[k] += x) %= mod; } ll sum(int k) { ll res = 0; for (; k; k -= k & -k) (res += data[k]) %= mod; return res; } }; int compress(vector& A) { auto B = A; sort(B.begin(), B.end()); B.erase(unique(B.begin(), B.end()), B.end()); for (auto&& i : A) { i = lower_bound(B.begin(), B.end(), i) - B.begin(); } return B.size(); } int main() { int N; cin >> N; vector X(N), Y(N); for (int i=0; i> a >> b; X[i] = a + b; Y[i] = a - b; } if (X.front() > X.back()) { for (auto&& i : X) i = -i; } if (Y.front() > Y.back()) { for (auto&& i : Y) i = -i; } compress(X); int K = compress(Y); vector> A; for (int i=0; i X[i] || X[i] > X.back()) continue; if (Y.front() > Y[i] || Y[i] > Y.back()) continue; A.emplace_back(X[i], Y[i]); } int M = A.size(); sort(A.begin(), A.end()); BinaryIndexedTree BIT(K); for (int i=0; i