#include<bits/stdc++.h>
using namespace std;
#define ii pair<long long,long long>
#define X first
#define Y second
#define ll long long
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define mod(x) ((x)&(M-1))
#define sum(x,y) ((x)+(y))
#define mul(x,y) ((x)*(y))
#define sq(x) ((x)*(x))
#define bin(x) (1LL<<(x))
#define __NGUOICODENAYDEPTRAIVCL__ signed main()
const int L=5000;
const ll M=998244353;
ll r, c, s, p[L];
ii a[L];
void in(){
cin>>c;
rep(i,1,c) cin>>a[i].X>>a[i].Y;
}
bool tri(int i, int j, int k){
return (sum(a[i].X,a[j].X)>a[k].X) & (sum(a[i].X,a[k].X)>a[j].X) & (sum(a[j].X,a[k].X)>a[i].X);
}
void cal(int i, int j, int k){
int l=1;
l += ((a[i].Y^a[j].Y)!=0);
l += ((mul(a[i].Y,a[j].Y) - mul(a[i].Y,a[k].Y) + (a[k].Y<<1) - mul(a[j].Y,a[k].Y)) != 0);
s=mod(sum(a[i].X,sum(a[j].X,a[k].X)));
s = (l==2) ? mod(s<<1) : (l==3) ? mod(s*3) : s;
r=mod(sum(r,s));
}
void bf(){
rep(i,1,c) rep(j,i+1,c) rep(k,j+1,c){
if(tri(i,j,k)) cal(i,j,k);
}
cout<<r;
}
void opt(){
sort(a+1,a+c+1);
rep(i,1,c) p[i]=mod(sum(a[i].X,p[i-1]));
rep(i,3,c) rep(j,2,i-1){
int l=1,h=j-1,m,pj=j;
while(l<=h){
m=(l+h)>>1;
if(sum(a[m].X,a[j].X)<=a[i].X) l=m+1;
else pj=m, h=m-1;
}
r=mod(sum(r,mod(mul(sum(a[i].X,a[j].X),((j-1)-pj+1)))+mod(sum(p[j-1],-p[pj-1]))));
}
cout<<r;
}
__NGUOICODENAYDEPTRAIVCL__{
ios::sync_with_stdio(0); cin.tie(0);
in();
(c<=200) ? bf() : opt();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpaSBwYWlyPGxvbmcgbG9uZyxsb25nIGxvbmc+CiNkZWZpbmUgWCBmaXJzdAojZGVmaW5lIFkgc2Vjb25kCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcmVwKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iOysraSkKI2RlZmluZSBwZXIoaSxhLGIpIGZvcihpbnQgaT1hO2k+PWI7LS1pKQojZGVmaW5lIG1vZCh4KSAoKHgpJihNLTEpKQojZGVmaW5lIHN1bSh4LHkpICgoeCkrKHkpKQojZGVmaW5lIG11bCh4LHkpICgoeCkqKHkpKQojZGVmaW5lIHNxKHgpICgoeCkqKHgpKQojZGVmaW5lIGJpbih4KSAoMUxMPDwoeCkpCiNkZWZpbmUgX19OR1VPSUNPREVOQVlERVBUUkFJVkNMX18gc2lnbmVkIG1haW4oKQoKY29uc3QgaW50IEw9NTAwMDsKY29uc3QgbGwgTT05OTgyNDQzNTM7CmxsIHIsIGMsIHMsIHBbTF07CmlpIGFbTF07Cgp2b2lkIGluKCl7CiAgICBjaW4+PmM7CiAgICByZXAoaSwxLGMpIGNpbj4+YVtpXS5YPj5hW2ldLlk7Cn0KCmJvb2wgdHJpKGludCBpLCBpbnQgaiwgaW50IGspewogICAgcmV0dXJuIChzdW0oYVtpXS5YLGFbal0uWCk+YVtrXS5YKSAmIChzdW0oYVtpXS5YLGFba10uWCk+YVtqXS5YKSAmIChzdW0oYVtqXS5YLGFba10uWCk+YVtpXS5YKTsKfQoKdm9pZCBjYWwoaW50IGksIGludCBqLCBpbnQgayl7CiAgICBpbnQgbD0xOwogICAgbCArPSAoKGFbaV0uWV5hW2pdLlkpIT0wKTsKICAgIGwgKz0gKChtdWwoYVtpXS5ZLGFbal0uWSkgLSBtdWwoYVtpXS5ZLGFba10uWSkgKyAoYVtrXS5ZPDwxKSAtIG11bChhW2pdLlksYVtrXS5ZKSkgIT0gMCk7CiAgICBzPW1vZChzdW0oYVtpXS5YLHN1bShhW2pdLlgsYVtrXS5YKSkpOwogICAgcyA9IChsPT0yKSA/IG1vZChzPDwxKSA6IChsPT0zKSA/IG1vZChzKjMpIDogczsKICAgIHI9bW9kKHN1bShyLHMpKTsKfQoKdm9pZCBiZigpewogICAgcmVwKGksMSxjKSByZXAoaixpKzEsYykgcmVwKGssaisxLGMpewogICAgICAgIGlmKHRyaShpLGosaykpIGNhbChpLGosayk7CiAgICB9CiAgICBjb3V0PDxyOwp9Cgp2b2lkIG9wdCgpewogICAgc29ydChhKzEsYStjKzEpOwogICAgcmVwKGksMSxjKSBwW2ldPW1vZChzdW0oYVtpXS5YLHBbaS0xXSkpOwogICAgcmVwKGksMyxjKSByZXAoaiwyLGktMSl7CiAgICAgICAgaW50IGw9MSxoPWotMSxtLHBqPWo7CiAgICAgICAgd2hpbGUobDw9aCl7CiAgICAgICAgICAgIG09KGwraCk+PjE7CiAgICAgICAgICAgIGlmKHN1bShhW21dLlgsYVtqXS5YKTw9YVtpXS5YKSBsPW0rMTsKICAgICAgICAgICAgZWxzZSBwaj1tLCBoPW0tMTsKICAgICAgICB9CiAgICAgICAgcj1tb2Qoc3VtKHIsbW9kKG11bChzdW0oYVtpXS5YLGFbal0uWCksKChqLTEpLXBqKzEpKSkrbW9kKHN1bShwW2otMV0sLXBbcGotMV0pKSkpOwogICAgfQogICAgY291dDw8cjsKfQoKX19OR1VPSUNPREVOQVlERVBUUkFJVkNMX197CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKICAgIGluKCk7CiAgICAoYzw9MjAwKSA/IGJmKCkgOiBvcHQoKTsKfQo=