#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
int i, j, k;
int i2, j2, k2;
struct vertex
{
float x, y;
};
bool cmpv(const vertex &a, const vertex &b)
{
if (a.x < b.x)
return true;
if (a.x == b.x && a.y > b.y)
return true;
return false;
}
int vcount;
std::vector<vertex> v;
std::vector<vertex> o;
bool right(vertex& v1, vertex& v2, vertex& v3)
{
float x1 = v2.x - v1.x;
float y1 = v2.y - v1.y;
float x2 = v3.x - v1.x;
float y2 = v3.y - v1.y;
return (x1*y2 - x2*y1) < 0.0f;
}
void obalka()
{
o.clear();
if (vcount > 0)
o.push_back(v[0]);
if (vcount > 1)
o.push_back(v[1]);
for (i = 2; i < vcount; i++)
{
while (!right(o[o.size()-2], o[o.size()-1], v[i]))
{
//printf("vyhazuju %0.1f %0.1f\n", o.back().x, o.back().y);
o.pop_back();
if (o.size() == 1)
{
break;
}
}
o.push_back(v[i]);
//printf("pridavam %0.1f %0.1f\n", o.back().x, o.back().y);
}
for (i = vcount-1; i >= 0; i--)
{
while (!right(o[o.size()-2], o[o.size()-1], v[i]))
{
// printf("vyhazuju %0.1f %0.1f\n", o.back().x, o.back().y);
o.pop_back();
if (o.size() == 1)
{
break;
}
}
o.push_back(v[i]);
//printf("pridavam %0.1f %0.1f\n", o.back().x, o.back().y);
}
/*
for (int i = 0; i < (int)o.size(); i++)
{
printf("o: %.1f %.1f\n", o[i].x, o[i].y);
}
printf("///\n");
*/
}
void obdelnik()
{
float minx, maxx, miny, maxy;
float minobsah = 100000000000.f;
float sx, sy, nx, ny;
for (int i = 0; i < (int)o.size()-1; i++)
{
minx = 10000000000.f;
miny = 10000000000.f;
maxx = -10000000000.f;
maxy = -10000000000.f;
sx = o[i+1].x - o[i].x;
sy = o[i+1].y - o[i].y;
float invlen = 1.f / sqrt(sx * sx + sy * sy);
sx *= invlen;
sy *= invlen;
nx = sy;
ny = -sx;
float x, y;
for (int j = 0; j < (int)o.size(); j++)
{
x = o[j].x * sx + o[j].y * sy;
y = o[j].x * nx + o[j].y * ny;
minx = std::min(x, minx);
miny = std::min(y, miny);
maxx = std::max(x, maxx);
maxy = std::max(y, maxy);
}
minobsah = std::min(minobsah, 2 * (maxx - minx) + 2 * (maxy - miny));
}
printf("%f\n", minobsah);
}
/* ------------------------------- */
int main()
{
while (scanf("%d", &vcount) == 1)
{
v.clear();
v.reserve(vcount);
for (i = 0; i < vcount; i++)
{
vertex vnew;
scanf("%f%f", &vnew.x, &vnew.y);
v.push_back(vnew);
}
std::sort(v.begin(), v.end(), cmpv);
/*
for (i = 0; i < vcount; i++)
{
printf("%f %f\n",v[i].x, v[i].y);
}
printf("--\n");
*/
obalka();
obdelnik();
}
return 0;
}