#include <iostream>
#include <utility>
#include <math.h>
#include <algorithm>

using namespace std;

#define MAXN 1500

class duz
{
public:
   float duzina;
   pair<float, float> tacka1;
   pair<float, float> tacka2;
};

float distance(pair<float, float> tacka1, pair<float, float> tacka2)
{
   return sqrt((tacka1.first - tacka2.first) * (tacka1.first - tacka2.first) + (tacka1.second - tacka2.second) * (tacka1.second - tacka2.second));
}

bool duzinaCmp(duz a, duz b)
{
   return a.duzina < b.duzina;
}

int duzDuzine(duz duzi[], int l, int r, float duzince)
{
   if (r > 0)
   {
      int m = (l + r) / 2 + 1;
      if (duzi[m].duzina == duzince)
         return m;
      if (duzi[m].duzina > duzince)
         return duzDuzine(duzi, l, m - 1, duzince);
      return duzDuzine(duzi, m + 1, r, duzince);
   }
   return -1;
}

bool jeTrapez(duz a, duz b)
{
   float k1 = abs((a.tacka1.first - a.tacka2.first) / (a.tacka1.second - a.tacka2.second)), k2 = abs((b.tacka1.first - b.tacka2.first) / (b.tacka1.second - b.tacka2.second));
   if ((k1 == k2) && (a.tacka1.second - k1 * a.tacka1.first != b.tacka1.second - k2 * b.tacka1.first))
      return true;
   return false;
}

int main()
{
   int n, i, j, k = 0, c = 0;
   pair<float, float> tacke[MAXN];
   duz duzi[MAXN];

   cin >> n;
   for (i = 0; i < n; i++)
   {
      cin >> tacke[i].first >> tacke[i].second;
   }

   for (i = 0; i < n - 1; i++)
   {
      for (j = i; j < n; j++)
      {
         duzi[k].duzina = distance(tacke[i], tacke[j]);
         duzi[k].tacka1 = tacke[i];
         duzi[k].tacka2 = tacke[j];
         k++;
      }
   }
   sort(duzi, duzi + n, duzinaCmp);
   int najvecaPola = duzi[n - 1].duzina / 2 + 1;

   for (i = 0; i < k && duzi[i].duzina < najvecaPola; i++)
   {
      int j = duzDuzine(duzi, 0, n - 1, duzi[i].duzina * 2);
      if (j >= 0)
      {
         if (jeTrapez(duzi[i], duzi[j]))
         {
            c++;
         }
      }
   }

   cout << c;
   return 0;
}