#include<bits/stdc++.h>
#define ll long long
#define MAXN 200007
using namespace std;
const ll mod=1000000007;
vector<complex<ll>>v;
ll pow2mod(int n)
{
    ll res=1;
    while(n--)
    {
        res*=2;
        if(res>=mod) res%=mod;
    }
    return res;
}
ll area(complex<ll>a, complex<ll>b, complex<ll>c)
{
    complex<ll>area1=a*conj(b)-b*conj(a)+c*conj(a)-a*conj(c)+b*conj(c)-c*conj(b);
    return abs(area1.imag());
}
void solve14(int n)
{
    ll cnt=0;
    for(int i=1;i<(1<<n);i++)
    {
        vector<complex<ll>>v1;
        for(int j=0;j<n;j++)
        {
            if(i&(1<<j)) v1.push_back(v[j]);
        }
        if(v1.size()==2 && v1[0]*conj(v1[1])==v1[1]*conj(v1[0]))cnt++;
        else if(v1.size()>2)
        {
            bool x=false;
            for(int j=0;j<v1.size();j++)
            {
                for(int k=j+1;k<v1.size();k++)
                {
                    for(int l=k+1;l<v1.size();l++)
                    {
                        if(area(v1[j],v1[k],v1[l])==area(v1[j],v1[k],0)+area(v1[j],0,v1[l])+area(0,v1[k],v1[l])) x=true;
                    }
                }
            }
            if(x) cnt++;
            if(cnt>mod)cnt%=mod;
        }
    }
    cout<<cnt<<endl;
    return;
}
void solve3(int n)
{
    ll x=-v[0].real();
    int k=0,l=0;
    for(int i=1;i<n;i++)
    {
        if(v[i].real()<x) k++;
        else if(v[i].real()>x) l++;
    }
    //cerr<<k<<" "<<l<<endl;
    ll res=(pow2mod(n-1)+2*mod-pow2mod(k)-pow2mod(l)+1)%mod;
    cout<<res<<endl;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        ll x,y;
        cin>>x>>y;
        v.push_back({x,y});
    }
    for(int i=1;i<n;i++)
    {
        if(v[i].imag()!=-1)
        {
            solve14(n);
            return 0;
        }
    }
    if(v[0].imag()==1)
    {
        solve3(n); 
        return 0;
    }
    solve14(n);
    return 0;
}