#include <iostream>

using namespace std;

struct Tacka
{
    long long int x;
    long long int y;
};

struct Duz
{
    Tacka A;
    Tacka B;
    long long int duzina;
};

long double Abs(long double p)
{
    if(p>0)
    {
        return p;
    }
    return -p;
}

long double PovrsinaTrougla(Tacka A, Tacka B, Tacka C)
{
    return Abs((A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y)) / 2);
}

bool kolinearne(Tacka A, Tacka B, Tacka C)
{
    return PovrsinaTrougla(A, B, C) == 0;
}

long long int Duzina(Tacka A, Tacka B)
{
    return (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y);
}

int main()
{
    long long int n, i, res=0;
    cin >> n;
    Tacka tacke[n];
    Tacka M;
    M.x = 0;
    M.y = 0;
    for(i=0;i<n;i++)
    {
        cin >> tacke[i].x >> tacke[i].y;
    }
    long double p = PovrsinaTrougla(tacke[0], tacke[1], tacke[2]);
    long double p1 = PovrsinaTrougla(tacke[0], M, tacke[2]);
    long double p2 = PovrsinaTrougla(tacke[0], tacke[1], M);
    long double p3 = PovrsinaTrougla(M, tacke[1], tacke[2]);
    if(p1+p2+p3 == p)
    {
        res++;
    }
    Duz d1; d1.A = tacke[0]; d1.B = tacke[1]; d1.duzina = Duzina(d1.A, d1.B);
    Duz d2; d2.A = tacke[0]; d2.B = tacke[2]; d2.duzina = Duzina(d2.A, d2.B);
    Duz d3; d3.A = tacke[1]; d3.B = tacke[2]; d3.duzina = Duzina(d3.A, d3.B);
    if(Duzina(d1.A, M) + Duzina(M, d1.B) == d1.duzina)
    {
        res++;
    }
    if(Duzina(d2.A, M) + Duzina(M, d2.B) == d2.duzina)
    {
        res++;
    }
    if(Duzina(d3.A, M) + Duzina(M, d3.B) == d3.duzina)
    {
        res++;
    }
    if(d1.x == M.x && d1.y == M.y)
    {
        res++;
    }
    if(d2.x == M.x && d2.y == M.y)
    {
        res++;
    }
    if(d3.x == M.x && d3.y == M.y)
    {
        res++;
    }
    cout << res % 1000000007 << endl;
}