#include <iostream>
#include <vector>
#include <iomanip>
#include <math.h>
using namespace std ;
vector<double> v ;
double solv(double x, double y) {
   double a = 0 ;
   double q = 0 ;
   if (x + y >= 1) {
      q = sqrt(x*(y+x-1)/y) ;
      a = q*(1-y) ;
   }
   return a - (x-q)*y + y*(q*q*q-3*q*x-x*x*(x-3))/(3*x*(1-x)) ;
}
int main() {
   int n ;
   cout << setprecision(15) ;
   cin >> n ;
   vector<double> v(2*n) ;
   for (int i=0; i<2*n; i++)
      cin >> v[i] ;
   double minx = v[0] ;
   double maxx = v[0] ;
   double miny = v[1] ;
   double maxy = v[1] ;
   for (int i=0; i<2*n; i += 2) {
      minx = min(minx, v[i]) ;
      maxx = max(maxx, v[i]) ;
      miny = min(miny, v[i+1]) ;
      maxy = max(maxy, v[i+1]) ;
   }
   double scale = (maxx-minx)*(maxy-miny) ;
   if (n == 4) {
      cout << scale << endl ;
      return 0 ;
   }
   if (n != 6)
      cout << "Bad n" << endl ;
   int ip = -1 ;
   for (int i=0; i<2*n; i += 2) {
      if (v[i] != minx && v[i] != maxx && v[i+1] != miny && v[i+1] != maxy) {
         if (ip >= 0)
            cout << "Bad data set" << endl ;
         ip = i ;
      }
   }
   int op = (ip + 6) % (2 * n) ;
   if (v[op] != minx)
      swap(minx, maxx) ;
   if (v[op+1] != miny)
      swap(miny, maxy) ;
   double x = (v[ip]-minx) / (maxx-minx) ;
   double y = (v[ip+1]-miny) / (maxy-miny) ;
   double a = scale*(solv(x,y)+solv(y,x)+y*x) ;
   cout << a << endl ;
}
