using System;

class Program {

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

  static bool Paralelne(Tacka t1, Tacka t2, Tacka t3, Tacka t4)
  {
    if(Math.Abs(t1.x - t2.x) * Math.Abs(t3.y - t4.y) == Math.Abs(t3.x - t4.x) * Math.Abs(t1.y - t2.y)) return true;
    else if(Math.Abs(t1.x - t3.x) * Math.Abs(t2.y - t4.y) == Math.Abs(t2.x - t4.x) * Math.Abs(t1.y - t3.y)) return true;
    else if(Math.Abs(t1.x - t4.x) * Math.Abs(t2.y - t3.y) == Math.Abs(t2.x - t3.x) * Math.Abs(t1.y - t4.y)) return true;
    else return false;
  }

  static bool Cetvorka(Tacka t1, Tacka t2, Tacka t3, Tacka t4)
  {
     if (Paralelne(t1, t2, t3, t4) && (Math.Sqrt(Math.Pow(Math.Abs(t1.x - t2.x), 2) + Math.Pow(Math.Abs(t1.y - t2.y), 2)) == 2 * Math.Sqrt(Math.Pow(Math.Abs(t3.x - t4.x), 2) + Math.Pow(Math.Abs(t3.y - t4.y), 2)) || Math.Sqrt(Math.Pow(Math.Abs(t1.x - t3.x), 2) + Math.Pow(Math.Abs(t1.y - t3.y), 2)) == 2 * Math.Sqrt(Math.Pow(Math.Abs(t2.x - t4.x), 2) + Math.Pow(Math.Abs(t2.y - t4.y), 2)) || Math.Sqrt(Math.Pow(Math.Abs(t1.x - t4.x), 2) + Math.Pow(Math.Abs(t1.y - t4.y), 2)) == 2 * Math.Sqrt(Math.Pow(Math.Abs(t2.x - t3.x), 2) + Math.Pow(Math.Abs(t2.y - t3.y), 2)))) return true;
    else if (Paralelne(t1, t2, t3, t4) && (2 * Math.Sqrt(Math.Pow(Math.Abs(t1.x - t2.x), 2) + Math.Pow(Math.Abs(t1.y - t2.y), 2)) == Math.Sqrt(Math.Pow(Math.Abs(t3.x - t4.x), 2) + Math.Pow(Math.Abs(t3.y - t4.y), 2)) || 2 * Math.Sqrt(Math.Pow(Math.Abs(t1.x - t3.x), 2) + Math.Pow(Math.Abs(t1.y - t3.y), 2)) == Math.Sqrt(Math.Pow(Math.Abs(t2.x - t4.x), 2) + Math.Pow(Math.Abs(t2.y - t4.y), 2)) || 2 * Math.Sqrt(Math.Pow(Math.Abs(t1.x - t4.x), 2) + Math.Pow(Math.Abs(t1.y - t4.y), 2)) == Math.Sqrt(Math.Pow(Math.Abs(t2.x - t3.x), 2) + Math.Pow(Math.Abs(t2.y - t3.y), 2)))) return true;
    else return false;
  }

  static int BrojKombinacija(int brTacaka)
  {  
    int[] memo = new int[5];
    memo[0] = 1;
    for (int n = 1; n <= brTacaka; n++)
    {
      if (n <= 4) memo[n] = 1;
      for (int k = Math.Min(n - 1, 4); k > 0; k--) memo[k] += memo[k-1];
    }
    return memo[4];
  } 

  static int brojacKombinacija = 0;

  static void Kombinacije (int n, int[] komb, int j, int[,] matricaKomb)
  {
    if(j == 4)
    {
      for(int i = 0;i < 4; i++)
      {
        matricaKomb[brojacKombinacija, i] = komb[i];
      }
      brojacKombinacija++;
      return;
    }
    int prvi = 0;
    int poslednji = n - 4 + j;
    if(j > 0) 
    {
      prvi = komb[j - 1] + 1;
    }  
    for(int i = prvi; i <= poslednji; i++)
    {
      komb[j] = i;
      Kombinacije(n, komb, j + 1, matricaKomb);
    }
  }

  public static void Main (string[] args) {
    int brTacaka = Convert.ToInt32(Console.ReadLine());
    Tacka[] tacke = new Tacka [brTacaka];
    for(int i = 0;i < brTacaka; i++)
    {
      string[] s = Console.ReadLine().Split();
      tacke[i].x = Convert.ToInt32(s[0]);
      tacke[i].y = Convert.ToInt32(s[1]);
    } 

    int br = BrojKombinacija(tacke.Length);

    int[,] MatKombinacija = new int[br, 4];
    int[] pomocniNiz = new int [4];
    Kombinacije(brTacaka, pomocniNiz, 0, MatKombinacija);

    int brojCetvorki = 0;

    for(int i = 0; i < MatKombinacija.GetLength(0); i++)
    {
      if(Cetvorka(tacke[MatKombinacija[i, 0]], tacke[MatKombinacija[i, 1]], tacke[MatKombinacija[i, 2]], tacke[MatKombinacija[i, 3]])) brojCetvorki++;
    }
    Console.WriteLine(brojCetvorki);

  }
}