You are given n points on a plane. All the points are distinct and no three of them lie on the same line. Find the number of parallelograms with the vertices at the given points.

Input

The first line of the input contains integer n (1 ≤ n ≤ 2000) — the number of points.

Each of the next n lines contains two integers (xi, yi) (0 ≤ xi, yi ≤ 109) — the coordinates of the i-th point.

Output

Print the only integer c — the number of parallelograms with the vertices at the given points.

Example

Input

4
0 1
1 0
1 1
2 0


Output

1
#include <bits/stdc++.h>
using namespace std;
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
inline bool isLeapYear(long long int year) {
  return (year % 400 == 0) | (year % 4 == 0 && year % 100 != 0);
}
inline void normal(long long int &a) {
  a %= 1000000007;
  (a < 0) && (a += 1000000007);
}
inline long long int modMul(long long int a, long long int b) {
  a %= 1000000007, b %= 1000000007;
  normal(a), normal(b);
  return (a * b) % 1000000007;
}
inline long long int modAdd(long long int a, long long int b) {
  a %= 1000000007, b %= 1000000007;
  normal(a), normal(b);
  return (a + b) % 1000000007;
}
inline long long int modSub(long long int a, long long int b) {
  a %= 1000000007, b %= 1000000007;
  normal(a), normal(b);
  a -= b;
  normal(a);
  return a;
}
inline long long int modPow(long long int b, long long int p) {
  long long int r = 1;
  while (p) {
    if (p & 1) r = modMul(r, b);
    b = modMul(b, b);
    p >>= 1;
  }
  return r;
}
inline long long int modInverse(long long int a) {
  return modPow(a, 1000000007 - 2);
}
inline long long int modDiv(long long int a, long long int b) {
  return modMul(a, modInverse(b));
}
inline bool isInside(pair<int, int> p, long long int n, long long int m) {
  return (p.first >= 0 && p.first < n && p.second >= 0 && p.second < m);
}
inline bool isInside(pair<int, int> p, long long int n) {
  return (p.first >= 0 && p.first < n && p.second >= 0 && p.second < n);
}
inline bool isSquare(long long int x) {
  long long int s = sqrt(x);
  return (s * s == x);
}
inline bool isFib(long long int x) {
  return isSquare(5 * x * x + 4) || isSquare(5 * x * x - 4);
}
inline bool isPowerOfTwo(long long int x) {
  return ((1LL << (long long int)log2(x)) == x);
}
struct func {
  bool operator()(pair<int, int> const &a, pair<int, int> const &b) {
    if (a.first == b.first) return (a.second < b.second);
    return (a.first < b.first);
  }
};
const long long int INF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-9;
const int inf = 0x3f3f3f3f;
const int mx = (int)1e5 + 9;
struct Point {
  long long int s, p, x, y;
  string name;
  bool operator<(const Point &ob) const {
    return s == ob.s ? p < ob.p : s > ob.s;
  }
};
double distance(Point a, Point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
long long int n, m, t, i, j, res;
long long int counT(long long int x[], long long int y[], int N) {
  map<pair<long long int, long long int>, long long int> mp;
  for (int i = 0; i < N; i++) {
    for (int j = i + 1; j < N; j++) {
      long long int midX = x[i] + x[j];
      long long int midY = y[i] + y[j];
      mp[{midX, midY}]++;
    }
  }
  res = 0;
  for (auto it : mp) {
    long long int freq = it.second;
    res += freq * (freq - 1) / 2;
  }
  return res;
}
int main() {
  scanf("%lld", &t);
  long long int arr[t + 9], brr[t + 9];
  for (int i = 0; i < (t); i++) {
    scanf("%lld", &arr[i]);
    scanf("%lld", &brr[i]);
  }
  printf("%lld\n", counT(arr, brr, t));
}
