#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
struct Point {
int x, y;
};
int calculateArea(const Point& p1, const Point& p2, const Point& p3) {
return abs((p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y)) / 2);
}
bool comparePoints(const Point& p1, const Point& p2) {
return (p1.x < p2.x) || (p1.x == p2.x && p1.y < p2.y);
}
int findMaxArea(vector<Point>& points, int n) {
int maxArea = 0;
sort(points.begin(), points.end(), comparePoints);
for (int i = 0; i < n - 2; ++i) {
for (int j = i + 1; j < n - 1; ++j) {
for (int k = j + 1; k < n; ++k) {
int area = calculateArea(points[i], points[j], points[k]);
maxArea = max(maxArea, area);
}
}
}
return maxArea;
}
int main() {
// freopen("POLY4MAX.INP", "r", stdin);
// freopen("POLY4MAX.OUT", "w", stdout);
int n;
cin >> n;
vector<Point> points(n);
for (int i = 0; i < n; ++i) {
cin >> points[i].x >> points[i].y;
}
int maxArea = findMaxArea(points, n);
cout << maxArea << ".0"; // Write the result with 1 decimal place
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFBvaW50IHsKICAgIGludCB4LCB5Owp9OwoKaW50IGNhbGN1bGF0ZUFyZWEoY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIsIGNvbnN0IFBvaW50JiBwMykgewogICAgcmV0dXJuIGFicygocDEueCAqIChwMi55IC0gcDMueSkgKyBwMi54ICogKHAzLnkgLSBwMS55KSArIHAzLnggKiAocDEueSAtIHAyLnkpKSAvIDIpOwp9Cgpib29sIGNvbXBhcmVQb2ludHMoY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIpIHsKICAgIHJldHVybiAocDEueCA8IHAyLngpIHx8IChwMS54ID09IHAyLnggJiYgcDEueSA8IHAyLnkpOwp9CgppbnQgZmluZE1heEFyZWEodmVjdG9yPFBvaW50PiYgcG9pbnRzLCBpbnQgbikgewogICAgaW50IG1heEFyZWEgPSAwOwoKICAgIHNvcnQocG9pbnRzLmJlZ2luKCksIHBvaW50cy5lbmQoKSwgY29tcGFyZVBvaW50cyk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgbiAtIDE7ICsraikgewogICAgICAgICAgICBmb3IgKGludCBrID0gaiArIDE7IGsgPCBuOyArK2spIHsKICAgICAgICAgICAgICAgIGludCBhcmVhID0gY2FsY3VsYXRlQXJlYShwb2ludHNbaV0sIHBvaW50c1tqXSwgcG9pbnRzW2tdKTsKICAgICAgICAgICAgICAgIG1heEFyZWEgPSBtYXgobWF4QXJlYSwgYXJlYSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIG1heEFyZWE7Cn0KCmludCBtYWluKCkgewogICAvLyBmcmVvcGVuKCJQT0xZNE1BWC5JTlAiLCAiciIsIHN0ZGluKTsKICAgLy8gZnJlb3BlbigiUE9MWTRNQVguT1VUIiwgInciLCBzdGRvdXQpOwoKICAgIGludCBuOwogICAgY2luID4+IG47CgogICAgdmVjdG9yPFBvaW50PiBwb2ludHMobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGNpbiA+PiBwb2ludHNbaV0ueCA+PiBwb2ludHNbaV0ueTsKICAgIH0KCiAgICBpbnQgbWF4QXJlYSA9IGZpbmRNYXhBcmVhKHBvaW50cywgbik7CgogICAgY291dCA8PCBtYXhBcmVhIDw8ICIuMCI7ICAvLyBXcml0ZSB0aGUgcmVzdWx0IHdpdGggMSBkZWNpbWFsIHBsYWNlCgogICAgcmV0dXJuIDA7Cn0K