//Dedicated to my love,ivaziva
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 
// #ifndef ONLINE_JUDGE
// #include "C:\Users\andre\Downloads\cpp-dump-0.7.0\cpp-dump-0.7.0\cpp-dump.hpp"
// #define dbg(...) cpp_dump(__VA_ARGS__)
// #else
// #define dump(...)
// #endif 
using namespace std;
typedef long long ll;
typedef long double ldb; 
// using namespace __gnu_pbds;
// typedef tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_point_update> order_set;
const int mxN=1e6+50;  
const ldb eps=0.000001;
const int mod=998244353; //998244353 1e9+7
const int iinf=2e9;
const ll inf=1e17;   
#define int ll  
int n;
struct point {
    int X, Y;  
}p[mxN],q[mxN],r[mxN];

//sa usaco je template 

point operator+(point x,point y)
{
    return point(x.X+y.X,x.Y+y.Y);
}

point operator-(point x,point y)
{
    return point(x.X-y.X,x.Y-y.Y);
}  
   
bool cmp(point x,point y) 
{ 
    if(x.X!=y.X) return x.X<y.X;
    return x.Y<y.Y; 
}

int cross(point x,point y) 
{ 
    return x.X*y.Y-x.Y*y.X;
}

int CH1() 
{ 
    sort(p+1,p+1+n,cmp);
    int j=0;
    for(int i=1; i<=n; i++) 
    { 
        while((j>=2)&&(cross((q[j]-q[j-1]),(p[i]-q[j-1]))<=0)) 
        {
            j--; 
        }
        j++;
        q[j]=p[i];
    } 
    int lim=j;
    for(int i=n-1; i>=1; i--) 
    {
        while((j>lim)&&(cross((q[j]-q[j-1]),(p[i]-q[j-1]))<=0))
        {
            j--; 
        } 
        j++;  
        q[j]=p[i];
    } 
    return (j-(n>=2?1:0));
} 
int CH2(point IZBACI) 
{
    int j=0;
    for(int i=1; i<=n; i++) 
    { 
        if(p[i].X==IZBACI.X&&p[i].Y==IZBACI.Y) continue; 
        while((j>=2)&&(cross((r[j]-r[j-1]),(p[i]-r[j-1]))<=0))
        {
            j--; 
        }
        j++;  
        r[j]=p[i];
    }  
    int lim=j;   
    for(int i=n-1; i>=1; i--) 
    {
        if(p[i].X==IZBACI.X&&p[i].Y==IZBACI.Y) continue;
        while((j>lim)&&(cross((r[j]-r[j-1]),(p[i]-r[j-1]))<=0))
        {
            j--; 
        }
        j++;  
        r[j]=p[i];
    }
    return (j-(n>=2?1:0));
} 
int32_t main() 
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;  
    for(int i=1; i<=n; i++) cin >> p[i].X >> p[i].Y;
    int sz1=CH1();
    int ans=inf; 
    for(int i=1; i<=sz1; i++) 
    {  
        int sz2=CH2(q[i]),curr=0;  
        /// r1 r2 r3 ... r[sz2] r1     
        for(int j=1; j<sz2; j++) curr+=cross(r[j+1],r[j]); 
        curr+=cross(r[1],r[sz2]);
        ans=min(ans,abs(curr)/2); 
    }   
    cout << ans << "\n";
}