#include <algorithm>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
#define DEBUG(x) cout << ">>> " << #x << " : " << x << endl;
#define REP(i,a) for (int i = 0; i < (a); ++i)
#define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
#define FORD(i,a,b) for (int i = (a); i >= (b); --i)
inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
const int INF = 1<<29;
typedef long long ll;
///////////////////////////////////////////////////////////////////////////
struct Vector
{
double x, y;
Vector(double _x=0.0, double _y=0.0): x(_x), y(_y) {}
bool operator<(const Vector & v) const { return x < v.x || (x == v.x && y < v.y); }
Vector operator-(const Vector & v) const { return Vector(x-v.x, y-v.y); }
void operator/=(double n) { x /= n; y/=n; }
double size() const { return sqrt(x*x+y*y); }
};
double dot(const Vector & v1, const Vector & v2)
{
return v1.x * v2.x + v1.y * v2.y;
}
double cross(const Vector & v1, const Vector & v2)
{
return v1.x * v2.y - v1.y * v2.x;
}
double direction(const Vector & v1, const Vector & v2, const Vector & point)
{
return cross(point-v1, v2-v1);
}
void convex_hull(vector<Vector> & points, vector<Vector> & hull)
{
sort(points.begin(), points.end());
vector<Vector> top, bot;
REP(i, points.size())
{
while (top.size() >= 2 && direction(top[top.size()-2], points[i], top[top.size()-1]) <= 0)
top.pop_back();
top.push_back(points[i]);
while (bot.size() >= 2 && direction(bot[bot.size()-2], points[i], bot[bot.size()-1]) >= 0)
bot.pop_back();
bot.push_back(points[i]);
}
reverse(bot.begin(), bot.end());
hull = top;
if (bot.size() > 2)
hull.insert(hull.end(), bot.begin()+1, bot.end()-1);
}
const int MAX = 10007;
int main()
{
int N;
while (scanf("%d", &N) == 1)
{
vector<Vector> points(N), hull;
REP(i, N) scanf("%lf%lf", &points[i].x, &points[i].y);
convex_hull(points, hull);
double res = 1e12;
REP(i, hull.size())
{
Vector v = hull[(i+1)%hull.size()] - hull[i];
v /= v.size();
double x1 = 0.0, x2 = 0.0, y = 0.0;
REP(j, hull.size())
{
Vector v2 = hull[j]-hull[i];
double d = dot(v, v2);
x1 = min(x1, d);
x2 = max(x2, d);
double d2 = fabs(cross(v, v2));
y = max(y, d2);
}
res = min(res, 2 * (y + (x2-x1)));
}
printf("%.9lf\n", res);
}
return 0;
}