#include <bits/stdc++.h>
const int INF=1e9;
const int MOD=1e9+7;
//const int MOD=998244353;
const long long LINF=1e18;
using namespace std;
#define int long long
#define fin {cout<<"Bad"<<endl;return 0;}
//template
int M=2e5+4;
vector<int> r(M,1),p(M,0),sx(M,0),sy(M,0);

int find(int x){
  return (x==p[x]?x:p[x]=find(p[x]));
}
bool same(int x,int y){
  return find(x)==find(y);
}
void unite(int a,int b){
  a=find(a);b=find(b);
  if(a==b) return;
  if(r[a]<r[b]) swap(a,b);
  r[a]+=r[b];
  p[b]=a;
  sx[a]+=sx[b];
  sy[a]+=sy[b];
}
//main
signed main(){
  for(int i=0;i<M;i++)p[i]=i;
  for(int i=0;i<=1e5;i++)sx[i]++;
  for(int i=1e5+1;i<M;i++)sy[i]++;

  int N;cin>>N;
  set<int> s;
  for(int i=0;i<N;i++){
    int x,y;cin>>x>>y;y+=1e5;
    unite(x,y);
    s.insert(x);s.insert(y);
  }
  int ans=-N;

  set<int> t;
  for(int q:s)t.insert(find(q));
  for(int q:t)ans+=sx[q]*sy[q];
  cout<<ans<<endl;
}
