#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=5e4+5,INF=1e9;
typedef long long ll;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();}
return x*f;
}
int n;
struct data{
ll a,b;
bool operator <(const data &r)const{return b==r.b?a>r.a:b>r.b;}
}r[N];
int q[N],head,tail;
ll f[N];
inline double slope(int x,int y){
return (double)(f[x]-f[y])/(r[y+1].b-r[x+1].b);
}
void dp(){
head=tail=1;
for(int i=1;i<=n;i++){//printf("hi %d %d %d\n",i,r[i].b,r[i].a);
while(head<tail&&slope(q[head],q[head+1])<=r[i].a) head++;
f[i]=f[q[head]]+r[q[head]+1].b*r[i].a;//printf("f %d\n",f[i]);
while(head<tail&&slope(q[tail],i)<slope(q[tail-1],q[tail])) tail--;
q[++tail]=i;
}
printf("%lld",f[n]);
}
int main(){
//freopen("in.txt","r",stdin);
n=read();
for(int i=1;i<=n;i++) r[i].a=read(),r[i].b=read();
sort(r+1,r+1+n);
int p=0;r[++p]=r[1];
for(int i=2;i<=n;i++)
if(r[i].a>r[p].a) r[++p]=r[i];
n=p;
dp();
}