#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#define N 100005
using namespace std;
int tree[N+2],n,A[N+2];
struct pai
{
int x,h,num;
};
pai all[N];
struct li
{
int x,h;
};
li al[N];
int cmp(const void *a,const void *b)
{
return (*(pai *)a).x - (*(pai *)b).x;
}
int cmpp(const void *a,const void *b)
{
return (*(pai *)a).h - (*(pai *)b).h;
}
int cm(const void *a,const void *b)
{
return (*(li *)b).h - (*(li *)a).h;
}
int lowbit(int k)
{
return k&(-k);
}
void Modify(int num,int v)
{
while(num < N)
{
tree[num] += v;
num += lowbit(num);
}
}
__int64 sum(int num)
{
__int64 ans = 0;
while (num > 0)
{
ans += (__int64)tree[num];
num -= lowbit(num);
}
return ans;
}
void Modify2(int num)
{
while (num < N)
{
A[num] ++;
num += lowbit(num);
}
}
__int64 sum2(int num)
{
__int64 ans = 0;
while (num > 0)
{
ans += (__int64)A[num];
num -= lowbit(num);
}
return ans;
}
int main()
{
int i,j,k,n,m;
__int64 a,b,c,d,bb,dd;
__int64 ans;
while(scanf("%d",&n)!=EOF)
{
memset(tree,0,sizeof(tree));
memset(A,0,sizeof(A));
//将读入的数据进行离散化处理
for(i = 0;i < n;i++)
{
scanf("%d%d",&all[i].x,&all[i].h);
all[i].num = i;
}
qsort(all,n,sizeof(all[0]),cmp);
al[all[0].num].x = 1;
for(i = 1;i < n;i++)
{
if(all[i].x == all[i-1].x)
al[all[i].num].x = al[all[i-1].num].x;
else
al[all[i].num].x = i+1;
}
qsort(all,n,sizeof(all[0]),cmpp);
al[all[0].num].h = 1;
for(i = 1;i < n;i++)
{
if(all[i].h == all[i-1].h)
al[all[i].num].h = al[all[i-1].num].h;
else
al[all[i].num].h = i+1;
}
//离散化结束
qsort(al,n,sizeof(al[0]),cm);
Modify(al[0].x,al[0].x);
Modify2(al[0].x);
ans = 0;
for(i = 1;i < n;i++)
{
a = sum(N);
bb = sum(al[i].x);
b = sum(al[i].x-1);
c = sum2(N);
dd = sum2(al[i].x);
d = sum2(al[i].x - 1);
ans += ((__int64)al[i].x * d - b)*(__int64)al[i].h;
ans += (a-bb-(c-dd)*(__int64)al[i].x)*(__int64)al[i].h;
Modify(al[i].x,al[i].x);
Modify2(al[i].x);
}
printf("%I64d\n",ans);
}
return 0;
}