#include<cctype>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<queue>
#include<stack>
#include<set>
#include<map>
#define CLEAR(a) memset((a),0,sizeof((a)))
using namespace std;
typedef long long LL;
const double pi = acos(-1.0);
const int maxn=1e5+10;
const int inf=99999999;
const float eps=1e-3;
struct dat
{
int x,v;
bool operator< (const dat a) const
{
if (v==a.v) return x<a.x;
else return v<a.v;
}
} data[maxn];
map<int,bool> mp;
//vector<int> vec;
LL n,ans,cnt;
LL a[maxn],t[maxn];
void init();
void solve();
void outp();
void Merge(LL *a,int x,int y,LL *t)
{
if(y-x>1)
{
int m=x+(y-x)/2;
int p=x,q=m,i=x;
Merge(a,x,m,t);
Merge(a,m,y,t);
while(p<m||q<y)
{
if(q>=y||(p<m&&a[p]<=a[q])) {t[i++]=a[p++];}
else {t[i++]=a[q++];cnt+=m-p;}
}
for(int i=x;i<y;i++) {a[i]=t[i];}
}
}
int main()
{
while(~scanf("%d",&n))
{
init();
Merge(a,1,n+1,t);
outp();
}
return 0;
}
void solve()
{
}
void init()
{
ans=0;
mp.clear();
for(int i=1;i<=n;i++)
{
scanf("%d%d",&data[i].x,&data[i].v);
if (mp[data[i].x]>0) ans++;
mp[data[i].x]=1;
}
sort(data+1,data+n+1);
//vec.clear();
CLEAR(a);CLEAR(t);
for(int i=1;i<=n;i++) //vec.push_back(data[i].x);
{
a[++a[0]]=data[i].x;
}
cnt=0;
}
void outp()
{
printf("%lld\n",ans+cnt);
}