#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define pi 3.14159265358979323846
const double eps = 1e-8;

struct Tacka
{
    int x, y;
} niz[100005];
double P(int x1, int y1, int x2, int y2, int x3, int y3)
{
    return fabs((x1*(y2-y3) + x2*(y3-y1)+ x3*(y1-y2))/2.0);
}
unsigned long long Stepen[100005];
bool provera(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y)
{
    double A = P (x1, y1, x2, y2, x3, y3);
    double B = P (x, y, x2, y2, x3, y3);
    double C = P (x1, y1, x, y, x3, y3);
    double D = P (x1, y1, x2, y2, x, y);
    return (A == B + C + D);
}
double polug[100005];
double polarni(double y, double x)
{
    double al = atan2(y, x);
    if (al < -eps) al += 2 * pi;
    return al;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n, ostalo;
    cin >> n;
    unsigned long long br=0;

    if (n==3)
    {
        for(int i=0; i<n; i++)
            cin >> niz[i].x >> niz[i].y;
        for(int i=0; i<n-1; i++)
            br+=provera(niz[i].x, niz[i].y, niz[i+1].x,niz[i+1].y,niz[i+1].x, niz[i+1].y, 0,0);
        br+=provera(niz[0].x, niz[0].y, niz[2].x, niz[2].y,niz[2].x,niz[2].y, 0,0);
        br+=provera(niz[0].x, niz[0].y, niz[1].x, niz[1].y,niz[2].x,niz[2].y, 0,0);
        cout<<br%mod<<endl;
    }
    else
    {
        n++;
        for (int i = 0; i < n-1; i++)
            cin >> niz[i].x >> niz[i].y;
        niz[n-1].x=0;
        niz[n-1].y=0;
        Stepen[0] = 1;
        for (int i = 1; i <= n; i++) Stepen[i]= Stepen[i-1]*2% mod;
        int i=n-1;
        ostalo=0;
        for (int j = 0; j < n; j++)
            if (i != j) polug[ostalo++] = polarni(niz[j].y - niz[i].y,niz[j].x - niz[i].x);
        sort(polug, polug + ostalo);
        int bio=Stepen[n-1]-1;
        for (int j=0; j<ostalo; j++)
        {
            int sadrzi=0;
            if (polug[j] > pi - eps)
                sadrzi=lower_bound(polug, polug+ostalo,polug[j])-lower_bound(polug,polug+ostalo,polug[j] - pi);
            else
            {
                sadrzi=lower_bound(polug, polug+ostalo, polug[j])-polug;
                sadrzi+= ostalo-(lower_bound(polug, polug+ostalo,polug[j]+pi)-polug);
            }
            bio =(bio-Stepen[sadrzi]+mod)%mod;
        }
        br=(br+bio)%mod;
        cout << br << endl;
    }
    return 0;
}