import
java.util.*;
public
class
GFG
{
static
int
findManhattanEuclidPair(
int
[][] arr,
int
n)
{
Map<Integer, Integer> X =
new
HashMap<Integer, Integer>();
Map<Integer, Integer> Y =
new
HashMap<Integer, Integer>();
Map<List<Integer>, Integer> XY =
new
HashMap<List<Integer>, Integer>();
for
(
int
i =
0
; i < n; i++) {
int
xi = arr[i][
0
];
int
yi = arr[i][
1
];
if
(!X.containsKey(xi))
X.put(xi,
0
);
X.put(xi, X.get(xi) +
1
);
if
(!Y.containsKey(yi))
Y.put(yi,
0
);
Y.put(yi, Y.get(yi) +
1
);
if
(!XY.containsKey(Arrays.asList(xi, yi)))
XY.put(Arrays.asList(xi, yi),
0
);
XY.put( Arrays.asList(xi, yi), XY.get(Arrays.asList(xi, yi)) +
1
);
}
int
xAns =
0
, yAns =
0
, xyAns =
0
;
for
(Map.Entry<Integer, Integer> xCoordinatePair : X.entrySet())
{
int
xFrequency = xCoordinatePair.getValue();
int
sameXPairs
= (xFrequency * (xFrequency -
1
)) /
2
;
xAns += sameXPairs;
}
for
(Map.Entry<Integer, Integer> yCoordinatePair : Y.entrySet()) {
int
yFrequency = yCoordinatePair.getValue();
int
sameYPairs
= (yFrequency * (yFrequency -
1
)) /
2
;
yAns += sameYPairs;
}
for
(Map.Entry<List<Integer>, Integer> XYPair : XY.entrySet())
{
int
xyFrequency = XYPair.getValue();
int
samePointPairs
= (xyFrequency * (xyFrequency -
1
)) /
2
;
xyAns += samePointPairs;
}
return
(xAns + yAns - (
2
* xyAns));
}
public
static
void
main(String[] args)
{
int
[][] arr
= { {
1
,
2
}, {
1
,
2
}, {
4
,
3
}, {
1
,
3
} };
int
n = arr.length;
System.out.println(findManhattanEuclidPair(arr, n));
}
}