#include using namespace std; typedef long long llint; typedef pair point; #define x first #define y second const int MAXN = 400; point points[MAXN]; pair quads[MAXN][MAXN]; llint ccw(const point& a, const point& b, const point& c) { return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); } int main() { freopen("fence.in", "r", stdin); freopen("fence.out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, i, j, k; llint a, b, c; llint sol = 1ll<<60; cin>>n; for (i = 0; i < n; ++i) cin>>points[i].x>>points[i].y; for (i = 0; i < n; ++i) for (j = i + 1; j < n; ++j) quads[i][j] = {1ll<<60, -1ll<<60}; for (i = 0; i < n; ++i) for (j = i + 1; j < n; ++j) for (k = j + 1; k < n; ++k) { a = ccw(points[i], points[j], {0, 0}); b = ccw(points[j], points[k], {0, 0}); c = ccw(points[k], points[i], {0, 0}); if (a && b && c && (a > 0) == (b > 0) && (b > 0) == (c > 0)) { sol = min(sol, abs(a + b + c)); } else { if (!a && b && c && (b > 0) == (c > 0)) { if (b > 0) quads[i][j].first = min(quads[i][j].first, b + c); else quads[i][j].second = max(quads[i][j].second, b + c); sol = min(sol, quads[i][j].first - quads[i][j].second); } else if (a && !b && c && (c > 0) == (a > 0)) { if (c > 0) quads[j][k].first = min(quads[j][k].first, c + a); else quads[j][k].second = max(quads[j][k].second, c + a); sol = min(sol, quads[j][k].first - quads[j][k].second); } else if (a && b && !c && (a > 0) == (b > 0)) { if (a > 0) quads[i][k].first = min(quads[i][k].first, a + b); else quads[i][k].second = max(quads[i][k].second, a + b); sol = min(sol, quads[i][k].first - quads[i][k].second); } } } cout<