#include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <assert.h>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>

//#define DEBUG 1

#define int long long
#define for0(i,n) for (int i=0; i<n; i++)
#define iter(c) for(auto it=c.begin(); it!=c.end(); it++)
#define iter2(c) for(auto it2=c.begin(); it2!=c.end(); it2++)
#define vec(x) vector< x >
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define X first
#define Y second
#define sqr(x) 1LL*(x)*(x)
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define sz(x) (int)(x).size()
#ifdef int
#define read(x) scanf("%lld",&x);
#else
#define read(x) scanf("%d",&x);
#endif

#ifdef DEBUG
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<sz(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define debug cout<<"ok at line "<<__LINE__<<endl;
#else
#define nl
#define pr(x)
#define prl(x)
#define prp(x)
#define printv(v)
#define printa(a,s)
#define print2D(a,m,n)
#define debug
#endif

using namespace std;

typedef long long ll;
typedef pair<long long, long long> point;

const int INF = 2147483647;
const long long INFL = 9223372036854775807LL;
const double EPSILON = 0.00000001;
const long long MOD = 998244353;

ll pow2[205];

bool colinear(point a, point b, point c){
    return a.X*b.Y - a.Y*b.X + a.Y*c.X - a.X*c.Y + b.X*c.Y - c.X*b.Y == 0;    
}

ll get_score(ll k)
{
    if (k < 3)
        return 0;
    ll ret = (pow2[k] - 1 - k - k*(k-1)/2) % MOD;
    //ret = (ret + MOD) % MOD;
    return ret;
}

bool done[205][205];

int32_t main()
{
    #ifdef DEBUG
    freopen("convex_score.txt","r",stdin);
    //freopen("","w",stdout);
    #endif

    ms(done,false);
    vector<point> points;
    int n;
    cin >> n;
    for0(i,n) {
        int x,y;
        cin >> x >> y;
        points.pb({x,y});
    }
    pow2[0] = 1;
    for (int i=1; i<=n; i++)
        pow2[i] = (pow2[i-1] * 2) %MOD;
    
    ll total = get_score(n);
    prl(total)
    
    for (int i=0; i<n; i++) {
        for (int j=i+1; j<n; j++) {
            if (done[i][j]) continue;
            
            done[i][j] = done[j][i] = true;
            vector<int> colinear_set = {i,j};
            for (int k=j+1; k<n; k++) {
                if (colinear(points[i], points[j], points[k])) {
                    iter(colinear_set) {
                        done[*it][k] = done[k][*it] = true;
                    }
                    colinear_set.pb(k);
                }
            }
            if (sz(colinear_set) >= 3) {
                pr(i) pr(j) nl
                printv(colinear_set)
                total = (total - get_score(sz(colinear_set))) % MOD;
            }
        }
    }
    
    total = (total + MOD) % MOD;
    cout<<total<<endl;
    return 0;
}


Measured memory_bytes: 256