#include<bits/stdc++.h>
#include<complex>
#define fi(i, a, b) for(int i = a; i < b ; ++i)
#define fd(i, a, b) for(int i = a; i < b ; --i)
using namespace::std;
typedef vector<complex< double> > vz;
typedef complex<double> cx;
//typedef complex<double>::iterator ct;
bool compy(cx a, cx b)
{
if(imag(a) < imag(b)) return true;
else if(imag(a) == imag(b)) return real(a) < real(b);
return false;
}
bool compol(cx a, cx b)
{
return (arg(a) < arg(b));
}
void update(vz &v, cx &ausi, int mode)
{
if(mode == 1)
for(int i = 0 ; i < v.size() ; ++i)
{
v[i] -= ausi;
}
else
for(int i = 0 ; i < v.size() ; ++i)
{
v[i] += ausi;
}
}
double area(cx a, cx b, cx c)
{
return (real(b) - real(a))*(imag(c) - imag(b)) - (real(c) - real(b))*(imag(b) - imag(a));
}
double perimeter(vector<cx> &hull)
{
int i;
double peri = 0.0, x = 0.0;
for(i = 0 ; i < hull.size() -1; ++i)
{
x = sqrt((real(hull[i+1]) - real(hull[i]))*(real(hull[i+1]) - real(hull[i])) + (imag(hull[i+1]) - imag(hull[i]))*(imag(hull[i+1]) - imag(hull[i])));
peri += x;
}
x = sqrt((real(hull[i]) - real(hull[0]))*(real(hull[i]) - real(hull[0])) + (imag(hull[i]) - imag(hull[0]))*(imag(hull[i]) - imag(hull[0])));
peri += x;
return peri;
}
int main()
{
int n, i = 0, x, y, T;
vector<complex<double> > z ;
complex<double> ausi;
vector<cx> hull;
// freopen("convex hull using complex no INP file.txt", "r", stdin);
// freopen("convex hull using complex no OUT file.txt", "w", stdout);
// cout<<"\nenter the no of points : \t";
cin>>n;
hull.clear();
z.clear();
i = 0;
// cout<<"\nenter each point (x, y) :\n";
while(i < n)
{
cin>>x>>y;
ausi = complex<double> (x, y);
z.push_back(ausi);
i++;
}
//cout<<"\nthe points in increasing ord of y co-ord (x co-ord breaks the tie ) are \n";
sort(z.begin(), z.end(), compy);
ausi = z[0];
/** translate all the points wrt base point **/
update(z, ausi, 1);
sort(z.begin(), z.end(), compol);
/**reset all the points **/
update(z, ausi, 0);
/**lets make the hull**/
hull.push_back(z[0]);
hull.push_back(z[1]);
size_t szz = z.size();
size_t szh = hull.size();
for(int i = 2 ; i <szz ; ++i)
{
while(area(hull[szh-2], hull[szh-1], z[i])<=0.0)
{
hull.pop_back();
szh--;
}
hull.push_back(z[i]);
szh++;
}
cout<<(int)perimeter(hull);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8Y29tcGxleD4KI2RlZmluZSBmaShpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDwgYiA7ICsraSkKI2RlZmluZSBmZChpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDwgYiA7IC0taSkKCnVzaW5nIG5hbWVzcGFjZTo6c3RkOwoKdHlwZWRlZiB2ZWN0b3I8Y29tcGxleDwgZG91YmxlPiA+IHZ6Owp0eXBlZGVmIGNvbXBsZXg8ZG91YmxlPiBjeDsKLy90eXBlZGVmIGNvbXBsZXg8ZG91YmxlPjo6aXRlcmF0b3IgY3Q7CmJvb2wgY29tcHkoY3ggYSwgY3ggYikKewogICAgaWYoaW1hZyhhKSA8IGltYWcoYikpICByZXR1cm4gdHJ1ZTsKICAgIGVsc2UgaWYoaW1hZyhhKSA9PSBpbWFnKGIpKSByZXR1cm4gcmVhbChhKSA8IHJlYWwoYik7CiAgICByZXR1cm4gZmFsc2U7Cn0KYm9vbCBjb21wb2woY3ggYSwgY3ggYikKewogICAgcmV0dXJuIChhcmcoYSkgPCBhcmcoYikpOwp9Cgp2b2lkIHVwZGF0ZSh2eiAmdiwgY3ggJmF1c2ksIGludCBtb2RlKQp7CiAgICBpZihtb2RlICA9PSAxKQogICAgZm9yKGludCBpID0gMCA7IGkgPCB2LnNpemUoKSA7ICsraSkKICAgIHsKICAgICAgIHZbaV0gLT0gYXVzaTsKICAgIH0KICAgIGVsc2UKICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgdi5zaXplKCkgOyArK2kpCiAgICB7CiAgICAgICAgdltpXSArPSBhdXNpOwogICAgfQp9CmRvdWJsZSBhcmVhKGN4IGEsIGN4IGIsIGN4IGMpCnsKICAgIHJldHVybiAocmVhbChiKSAtIHJlYWwoYSkpKihpbWFnKGMpIC0gaW1hZyhiKSkgLSAocmVhbChjKSAtIHJlYWwoYikpKihpbWFnKGIpIC0gaW1hZyhhKSk7Cn0KZG91YmxlIHBlcmltZXRlcih2ZWN0b3I8Y3g+ICZodWxsKQp7CiAgICBpbnQgaTsKICAgIGRvdWJsZSBwZXJpID0gMC4wLCB4ID0gMC4wOwogICAgZm9yKGkgPSAwIDsgaSA8IGh1bGwuc2l6ZSgpIC0xOyArK2kpCiAgICB7CiAgICAgICAgeCA9IHNxcnQoKHJlYWwoaHVsbFtpKzFdKSAtIHJlYWwoaHVsbFtpXSkpKihyZWFsKGh1bGxbaSsxXSkgLSByZWFsKGh1bGxbaV0pKSArIChpbWFnKGh1bGxbaSsxXSkgLSBpbWFnKGh1bGxbaV0pKSooaW1hZyhodWxsW2krMV0pIC0gaW1hZyhodWxsW2ldKSkpOwogICAgICAgIHBlcmkgKz0geDsKICAgIH0KCiAgICB4ID0gc3FydCgocmVhbChodWxsW2ldKSAtIHJlYWwoaHVsbFswXSkpKihyZWFsKGh1bGxbaV0pIC0gcmVhbChodWxsWzBdKSkgKyAoaW1hZyhodWxsW2ldKSAtIGltYWcoaHVsbFswXSkpKihpbWFnKGh1bGxbaV0pIC0gaW1hZyhodWxsWzBdKSkpOwogICAgcGVyaSArPSB4OwogICAgcmV0dXJuIHBlcmk7Cn0KaW50IG1haW4oKQp7CiAgaW50IG4sIGkgPSAwLCB4LCB5LCBUOwogIHZlY3Rvcjxjb21wbGV4PGRvdWJsZT4gPiB6IDsKICBjb21wbGV4PGRvdWJsZT4gYXVzaTsKICB2ZWN0b3I8Y3g+IGh1bGw7Ci8vICBmcmVvcGVuKCJjb252ZXggaHVsbCB1c2luZyBjb21wbGV4IG5vIElOUCBmaWxlLnR4dCIsICJyIiwgc3RkaW4pOwovLyAgICAgIGZyZW9wZW4oImNvbnZleCBodWxsIHVzaW5nIGNvbXBsZXggbm8gT1VUIGZpbGUudHh0IiwgInciLCBzdGRvdXQpOwoKLy8gICAgICAgIGNvdXQ8PCJcbmVudGVyIHRoZSBubyBvZiBwb2ludHMgOiBcdCI7CiAgICBjaW4+Pm47CiAgICBodWxsLmNsZWFyKCk7CiAgICB6LmNsZWFyKCk7CiAgICBpID0gMDsKLy8gICAgY291dDw8IlxuZW50ZXIgZWFjaCBwb2ludCAoeCwgeSkgOlxuIjsKICAgIHdoaWxlKGkgPCBuKQogICAgewogICAgICAgIGNpbj4+eD4+eTsKICAgICAgICBhdXNpID0gY29tcGxleDxkb3VibGU+ICh4LCB5KTsKICAgICAgICB6LnB1c2hfYmFjayhhdXNpKTsKICAgICAgICBpKys7CiAgICB9Ci8vY291dDw8IlxudGhlIHBvaW50cyBpbiBpbmNyZWFzaW5nIG9yZCBvZiB5IGNvLW9yZCAoeCBjby1vcmQgYnJlYWtzIHRoZSB0aWUgKSBhcmUgXG4iOwpzb3J0KHouYmVnaW4oKSwgei5lbmQoKSwgY29tcHkpOwphdXNpID0gelswXTsKCi8qKiB0cmFuc2xhdGUgYWxsIHRoZSBwb2ludHMgd3J0IGJhc2UgcG9pbnQgKiovCnVwZGF0ZSh6LCBhdXNpLCAxKTsKCiBzb3J0KHouYmVnaW4oKSwgei5lbmQoKSwgY29tcG9sKTsKCi8qKnJlc2V0IGFsbCB0aGUgcG9pbnRzICoqLwp1cGRhdGUoeiwgYXVzaSwgMCk7CgovKipsZXRzIG1ha2UgdGhlIGh1bGwqKi8KaHVsbC5wdXNoX2JhY2soelswXSk7Cmh1bGwucHVzaF9iYWNrKHpbMV0pOwpzaXplX3Qgc3p6ID0gei5zaXplKCk7CnNpemVfdCBzemggPSBodWxsLnNpemUoKTsKZm9yKGludCBpID0gMiA7IGkgPHN6eiA7ICsraSkKewogICAgd2hpbGUoYXJlYShodWxsW3N6aC0yXSwgaHVsbFtzemgtMV0sIHpbaV0pPD0wLjApCiAgICAgICAgewogICAgICAgICAgICBodWxsLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIHN6aC0tOwogICAgICAgIH0KICAgICAgICAgICAgaHVsbC5wdXNoX2JhY2soeltpXSk7CiAgICAgICAgICAgIHN6aCsrOwp9CiAgICBjb3V0PDwoaW50KXBlcmltZXRlcihodWxsKTsKICByZXR1cm4gMDsKfQoKCg==