#include <bits/stdc++.h>
using namespace std;

pair<long long, long long> c;

long long o(pair<long long, long long> p, pair<long long, long long> q, pair<long long, long long> r)
{
    long long v = (q.second - p.second) * (r.first - q.first) -
              (q.first - p.first) * (r.second - q.second);

    if(v == 0) return 0;
    return (v > 0) ? 1 : 2;
}

bool f(pair<long long, long long> a, pair<long long, long long> b) {
    return o(c, a, b) == 2;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, miny = 0;
    unsigned long long max_area = 0, area = 0;
    cin >> n;
    vector<pair<unsigned long long, unsigned long long>> t(n);
    for(int i = 0; i < n; i++) {
        cin >> t[i].first >> t[i].second;
        if(t[i].second < t[miny].second) {
            miny = i;
        }
    }
    c = t[miny];
    swap(t[miny], t[0]);
    sort(t.begin() + 1, t.end(), f);
    vector<pair<unsigned long long, unsigned long long>> h;
    h.insert(h.begin(), t.begin(), t.begin() + 3);
    for(int i = 3; i < n; i++) {
        while(h.size() > 1 && o(*(h.end() - 2), *(h.end() - 1), t[i]) != 2) {
            h.pop_back();
        }
        h.push_back(t[i]);
    }
    miny = 0;
    max_area = (h.at(h.size()-1).first * (h.at(0).second - h.at(1).second) + h.at(0).first * (h.at(1).second - h.at(h.size()-1).second) + h.at(1).first * (h.at(h.size()-1).second - h.at(0).second) / 2);
    for(int i = 1; i < h.size(); i++) {
        area = (h.at(i-1).first * (h.at(i).second - h.at((i+1) % h.size()).second) + h.at(i).first * (h.at((i+1) % h.size()).second - h.at(i-1).second) + h.at((i+1) % h.size()).first * (h.at(i-1).second - h.at(i).second)) / 2;
        if(area > max_area) {
            miny = i;
            max_area = area;
        }
    }

    for(int i = 0; i < n; i++) {
        if(t[i] == h[miny]) {
            t.erase(t.begin() + i);
            break;
        }
    }

    miny = 0;
    for(int i = 0; i < n-1; i++) {
        if(t[i].second < t[miny].second) {
            miny = i;
        }
    }
    c = t[miny];
    swap(t[miny], t[0]);
    sort(t.begin() + 1, t.end(), f);

    h.clear();
    h.insert(h.begin(), t.begin(), t.begin() + 3);
    for(int i = 3; i < n-1; i++) {
        while(h.size() > 1 && o(h.at(h.size() - 2), h.at(h.size() - 1), t[i]) != 2) {
            h.pop_back();
        }
        h.push_back(t[i]);
    }
    area = h.at(h.size()-1).first * h.at(0).second - h.at(0).first * h.at(h.size()-1).second;
    for(int i = 0; i < h.size() - 1; i++) {
        area += h.at(i).first * h.at(i+1).second - h.at(i+1).first * h.at(i).second;
    }
    cout << area / 2 << endl;
    return 0;
}