#include #include #include #include #include #include using namespace std; const long long LONG_LONG_MAX = 10000000000000007; struct intPoint { int x, y; intPoint(int a, int b): x(a), y(b) {} }; long long Area(intPoint a, intPoint b, intPoint c) { return abs((long long)(a.x - c.x) * (long long)(b.y - a.y) - (long long)(a.x - b.x) * (long long)(c.y - a.y)); } bool isIn(intPoint s, intPoint a, intPoint b, intPoint c) { int as_x = s.x-a.x; int as_y = s.y-a.y; bool s_ab = (b.x-a.x)*as_y-(b.y-a.y)*as_x > 0; if((c.x-a.x)*as_y-(c.y-a.y)*as_x > 0 == s_ab) return false; if((c.x-b.x)*(s.y-b.y)-(c.y-b.y)*(s.x-b.x) > 0 != s_ab) return false; if((a.x == 0 and b.x == 0) or (a.x == 0 and c.x == 0) or (b.x == 0 and c.x == 0)) { return false; } if((a.y == 0 and b.y == 0) or (a.y == 0 and c.y == 0) or (b.y == 0 and c.y == 0)) { return false; } if((a.x + b.x == a.y + b.y and a.x+b.x == 0) or (a.x + c.x == a.y + c.y and a.x+c.x == 0) or (b.x + c.x == b.y + c.y and b.x + c.x == 0)) { return false; } return true; } long long m[100008]; int main() { freopen("fence.in", "r", stdin); freopen("fence.out", "w", stdout); int n; cin >> n; vector v; long long min1, min2, min3, min4; min1=min2=min3=min4 = LONG_LONG_MAX; int i1, i2, i3, i4; i1=i2=i3=i4=-1; for(int i = 0; i < n; i++) { long long a, b; cin >> a >> b; v.push_back(intPoint(a, b)); if(a > 0 and b > 0) if(min1 > a*a+b*b) { min1 = min(min1, a*a + b*b), i1 = i;} if(a == 0 and b > 0) if(min1 < min2) { if(min2 > a*a+b*b) {min2 = min(min2, a*a + b*b), i2 = i;} } else if(min1 > a*a+b*b) {min1 = min(min1, a*a+b*b), i1 = i;} if(a > 0 and b == 0) if(min1 < min4) { if(min4 > a*a+b*b) { min4 = min(min4, a*a+b*b), i4 = i;} } else if(min1 > a*a+b*b) {min1 = min(min1, a*a+b*b); i1 = i;} if(a < 0 and b > 0) { if(min2 > a*a+b*b) {min2 = min(min2, a*a + b*b), i2 = i;} } if(a < 0 and b == 0) if(min2 < min3) { if(min3 > a*a+b*b) {min3 = min(min3, a*a+b*b), i3 = i;} } else if(min2 > a*a+b*b) {min2 = min(min2, a*a+b*b), i2 = i;} if(a < 0 and b < 0) if(min3 > a*a+b*b) {min3 = min(min3, a*a + b*b), i3 = i;} if(a == 0 and b < 0) if(min3 < min4) { if(min4 > a*a+b*b) {min4 = min(min4, a*a+b*b), i4 = i;} } else if(min3 > a*a+b*b) {min3 = min(min3, a*a+b*b), i3 = i;} if(a > 0 and b < 0) if(min4 > a*a+b*b) {min4 = min(min4, a*a + b*b), i4 = i;} } long long best = LONG_LONG_MAX; for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) for(int k = j+1; k < n; k++) { if(isIn(intPoint(0, 0), v[i], v[j], v[k]) and Area(v[i], v[j], v[k]) < best) best = Area(v[i], v[j], v[k]); } long long a=LONG_LONG_MAX; if(min1 != LONG_LONG_MAX and min2 != LONG_LONG_MAX and min3 != LONG_LONG_MAX and min4 != LONG_LONG_MAX) { a = Area(v[i1], v[i2], v[i3]) + Area(v[i3], v[i4], v[i1]); } cout << min(a, best) << endl; }