#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pi;
typedef pair<pi,pi> ppi;
const int N=205,P=998244353;
map<ppi,int>D;
int n,x[N],y[N],p2[N],m;
inline int gcd(int x,int y){return y?gcd(y,x%y):x;}
inline pi mk(pi x){
ll g=gcd(x.fi,x.se);
if(g)x.fi/=g,x.se/=g;
if(x.fi<0)x.fi=-x.fi,x.se=-x.se;
return x;
}
inline ppi mp(ll u1,ll v1,ll u2,ll v2){
pi l=mk({u2-u1,v2-v1});
pi s=mk({v1*l.fi-u1*l.se,l.fi});
return {l,s};
}
int get(int s){
s*=2;
int v=sqrt(1+4*s+0.5);
return (1+v)/2;
}
int main(){
scanf("%d",&n);
p2[0]=1;
for(int i=1;i<=n;i++)p2[i]=(p2[i-1]<<1)%P,scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<=n;i++)for(int j=1;j<i;j++)D[mp(x[i],y[i],x[j],y[j])]++;
m=p2[n];
for(auto&i:D){int t=get(i.se);m=(m-p2[t]+t+1+P)%P;}
m=(m-n-1+P)%P;
printf("%d\n",m);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:34:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&n);
^
./Main.cpp:36:69: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(int i=1;i<=n;i++)p2[i]=(p2[i-1]<<1)%P,scanf("%d%d",&x[i],&y[i]);
^