#include <bits/stdc++.h>
#define ll long long
#define pb(a) push_back(a)
#define in(a) insert(a)
#define lldef ll N=0,M=0,K=0,ans=0,sum=0; string s="";
#define loop(valuename,startvalue,endvalue,changevalue) for(ll valuename=startvalue; valuename<endvalue; valuename+=changevalue)
#define rloop(valuename,startvalue,endvalue,changevalue) for(ll valuename=startvalue-1; valuename>=endvalue; valuename-=changevalue)
#define mk make_pair
#define begin begin()
#define end end()
#define db long double
#define ff first
#define ss second
using namespace std;
const int SIZE=1e5+69;
const int MOD=1e9+7;
/*
vector<vector<ll>>ADJ(SIZE);
vector<ll>vis(SIZE,0);
void dfs(ll vertex){
vis[vertex]=true;
for(auto it:ADJ[vertex]){
if(!vis[it]){
dfs(it);
}
}
}
*/
bool Ptwo(ll N){
return (~N&N-1)==N-1;
}
ll l=0;
inline void test_case(){
lldef;
cin>>N;
map<ll,ll>mpx,mpy;
vector<pair<ll,ll>>V;
loop(i,0,N,1){
ll x,y;
cin>>x>>y;
V.push_back({x,y});
mpx[x]++;
mpy[y]++;
}
loop(i,0,N,1){
ll x1=V[i].ff;
ll y1=V[i].ss;
//cout<<x1<<" "<<y1<<" "<<mpx[x1]<<" "<<mpy[y1]<<endl;
ans+=(mpx[x1]-1)*(mpy[y1]-1);
}
cout<<ans<<endl;
}
int main(){
ll t=1;
//cin>>t;
while(t--) {test_case(); l++;}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |