#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
  int numberOfBoomerangs1(vector<vector <int>>& points){
    int points_size = points.size();
    int ans = 0;
    for(vector<int> firstpoint: points){
      for(vector<int> secondpoint: points){
	  if(samePoint(firstpoint, secondpoint))continue;
	  for(vector<int> thirdpoint: points){
	      if(samePoint(secondpoint, thirdpoint) || samePoint(firstpoint, thirdpoint)) continue;
	      if(distance(firstpoint, secondpoint) == distance(firstpoint, thirdpoint)){
		ans++;
		cout<<firstpoint[0]<<' '<<firstpoint[1]<<' '<<secondpoint[0]<<' '<<secondpoint[1]<<' '<<thirdpoint[0]<<' '<<thirdpoint[1]<<endl;
	      }
	  }
      }
    }
    return ans;
  }
  int numberOfBoomerangs(vector<vector<int>>& points){
    int point_size = points.size();
    int ans =0;
    double dist[510][510];
    for(int i = 0 ; i < point_size ;i++){
      for(int j = 0 ; j < point_size ;j++){
	dist[i][j] = distance(points[i],points[j]);
      }
    }

    for(int i = 0 ; i < point_size ; i++){
      for(int j = 0 ; j < point_size ; j++){
	cout<<dist[i][j]<<' ';
      }
      cout<<endl;
    }
    /*
    for(int i = 0 ; i < point_size;i++){
      for(int j = i + 1 ; j < point_size ; j++){
	if(i == j) continue;
	for(int k = j + 1 ; k < point_size ; k++) {
	  if(i == k || j == k) continue;
	  if(dist[i][j] == dist[i][k]){
	    ans += 2;
	    cout<<points[i][0]<<' ' <<points[i][1]<<' '<<points[j][0]<<' '<<points[j][1]<<' '<<points[k][0]<<' '<<points[k][1]<<' '<<dist[i][j]<<' '<<dist[i][k]<<endl;
	  }
	}
      }
    }
    */
    for(int i = 0 ; i < point_size ; i++){
      sort(dist[i],dist[i]+point_size);
      int tmp = 1;
      for(int j = 0 ; j < point_size ; j++)
	cout<<dist[i][j]<<' ';
      cout<<endl;
      for(int j = 1 ; j < point_size ; j++){
	if(dist[i][j]  == dist[i][j-1]){
	  tmp++;
	}
	else{
	  ans += tmp * (tmp-1);
	  tmp = 1;
	  cout<<i<<' '<<j<<' '<<tmp<<endl;
	}
      }
      ans += tmp * (tmp - 1);
    }
    return ans;
  }
    private:
      bool samePoint(vector<int> a, vector<int> b){
	  if(a[0] == b[0] && a[1] == b[1])
	    return true;
	  return false;
      }
      double distance(vector<int> a, vector<int> b){
	double rlt = (a[0]-b[0])*(a[0]-b[0]) +(a[1]-b[1])*(a[1]-b[1]);
	
	return sqrt(rlt);
      }
};
int main(){
  Solution sol;
  vector<int> point1 = {0,0};
  vector<int> point2 = {1,0};
  vector<int> point3 = {-1,0};
  vector<int> point4 = {0,1};
  vector<int> point5 = {0,-1};
  vector<vector<int>> ex1 = {point1, point2, point3,point4,point5};
  cout<<sol.numberOfBoomerangs(ex1)<<endl;
  //  vector<int> ex2_point1 = {1,1};
  //  vector<int> ex2_point2 = {2,2};
  //  vector<int> ex2_point3 = {3,3};
  //  vecotr<int> ex2_point4 = {
  vector<int> ex2_point1 = {0,0};
  vector<int> ex2_point2 = {0,1};
  vector<int> ex2_point3 = {5,0};
  vector<int> ex2_point4 = {5,1};
  vector<vector<int>> ex2 = {ex2_point1, ex2_point2, ex2_point3,ex2_point4};
  cout<<sol.numberOfBoomerangs(ex2)<<endl;
  
  
  return 0;
}