using System;

namespace Treci
{
    class Program
    {
        struct Tacka
        {
            public int x;
            public int y;
        }
        static int broj_sumnjivih = 0;
        static bool Pararelno(Tacka prvi, Tacka drugi, Tacka treci, Tacka cetvrti)
        {
            if((Math.Abs(drugi.x - prvi.x) == 0 && Math.Abs(cetvrti.x - treci.x) == 0) || (Math.Abs(drugi.y - prvi.y) == 0 && Math.Abs(cetvrti.y - treci.y) == 0))
            {
                return true;
            }
            else if(Math.Abs(drugi.y - prvi.y) * Math.Abs(cetvrti.x - treci.x) == Math.Abs(cetvrti.y - treci.y) * Math.Abs(drugi.x - prvi.x))
            {
                return true;
            }
            return false;
        }
        static void Rekurzija(int [] niz, int n, int brojac, Tacka [] niz_takmicara)
        {
            if (brojac == 4)
            {
                Tacka[] novi = {niz_takmicara[niz[0]], niz_takmicara[niz[1]] , niz_takmicara[niz[2]] , niz_takmicara[niz[3]]};
                if(Provera(novi))
                {
                    broj_sumnjivih++;
                }
                return;
            }
            else
            {
                int i;
                if (brojac == 0)
                {
                    i = 0;
                }
                else
                {
                    i = niz[brojac - 1] + 1;
                }
                for (; i <= n - 4 + brojac + 1; i++)
                {
                    niz[brojac] = i;
                    Rekurzija(niz, n, brojac + 1, niz_takmicara);
                }
            }
        }
        static bool Dupla(Tacka prvi, Tacka drugi, Tacka treci, Tacka cetvrti)
        {
            double rastojanje1 = Math.Sqrt(Math.Pow(prvi.x - drugi.x, 2) + Math.Pow(prvi.y - drugi.y, 2));
            double rastojanje2 = Math.Sqrt(Math.Pow(treci.x - cetvrti.x, 2) + Math.Pow(treci.y - cetvrti.y, 2));
            if (rastojanje1 * 2 == rastojanje2 || rastojanje2 * 2 == rastojanje1)
            {
                return true;
            }
            return false;
        }
        static bool Provera(Tacka [] kombinacija)
        {
            if(Pararelno(kombinacija[0], kombinacija[1], kombinacija[2], kombinacija[3]) && Dupla(kombinacija[0], kombinacija[1], kombinacija[2], kombinacija[3]))
            {
                return true;
            }
            else if (Pararelno(kombinacija[0], kombinacija[3], kombinacija[1], kombinacija[2]) && Dupla(kombinacija[0], kombinacija[3], kombinacija[1], kombinacija[2]))
            {
                return true;
            }
            else if (Pararelno(kombinacija[0], kombinacija[2], kombinacija[1], kombinacija[3]) && Dupla(kombinacija[0], kombinacija[2], kombinacija[1], kombinacija[3]))
            {
                return true;
            }
            return false;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            Tacka [] niz_takmicara = new Tacka[n];
            string[] s;
            int[] niz = new int[4];
            for(int i = 0; i < niz_takmicara.Length; i++)
            {
                s = Console.ReadLine().Split();
                niz_takmicara[i].x = int.Parse(s[0]);
                niz_takmicara[i].y = int.Parse(s[1]);
            }
            Rekurzija(niz,n-1,0,niz_takmicara);
            Console.WriteLine(broj_sumnjivih);
        }
    }
}