#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define inf 1000000000000000LL
#define mod 1000000007LL
#define FOR(i,a,b) for(int i = a; i < b; i++)
const int N = 500;
struct cord{
ll x,y;
};
ll dis(cord a, cord b){
return abs(a.x - b.x) + abs(a.y - b.y);
}
ll calc(cord a, cord b, cord c){
ll dx1 = a.x - b.x;
ll dy1 = a.y - b.y;
ll dx2 = c.x - b.x;
ll dy2 = c.y - b.y;
ll cross = dx1 * dy2 - dy1 * dx2;
if (cross == 0) return 2; // straight
if (cross > 0) return 1; // one turn direction
return 3; // the other turn direction
}
const ll Mod = 1000000009LL;
const ll Base = 271LL;
struct hashed_string{
private:
string s; ll n;
vector <ll> prefix;
vector <ll> pow;
public:
hashed_string(){
n = 0;
prefix.assign(N, 0);
ll sum = 0;
pow.assign(N+1, 0);
pow[0] = 1;
for (int i = 1; i <= N; i++){
pow[i] = (pow[i-1] * Base) % Mod;
}
}
void add_hash(ll a){
prefix[n] = a % mod; if (n >= 1) prefix[n] = (prefix[n] + prefix[n-1] * Base) % Mod;
n++;
}
ll get_full(){
return prefix[n-1];
}
ll get_hash(ll l, ll r){
ll x = prefix[r];
if (l >= 1){
l--;
x = ((x - prefix[l] * pow[r - l] % Mod) % Mod + Mod) % Mod;
}
return x;
}
};
void solve() {
ll n;
cin >> n;
deque <cord> l1(n);
for (int i = 0; i < n; i++) cin >> l1[i].x >> l1[i].y;
vector <ll> angle(n);
for (int i= 0; i < n; i++){
angle[i] = calc(l1[(i - 1 + n) % n], l1[i], l1[(i + 1) % n]);
}
auto find_dis = [&](ll i) -> ll{
if (i == 0) return 0LL;
ll x1 = 0; ll org = i;
while (i != 0){
x1 += dis(l1[i], l1[(i + 1) % n]);
i = (i + 1) % n;
}
i = org;
ll x2 = 0;
while (i > 0){
x2 += dis(l1[i], l1[i - 1]);
i--;
}
return min(x1, x2);
};
map <ll,ll> f;
for (int i = 1; i < n; i++){
hashed_string v = hashed_string();
v.add_hash(angle[i]);
f[v.get_full()] += 1;
for (int j = i + 1; j < n; j++){
v.add_hash(dis(l1[j], l1[j - 1]));
v.add_hash(angle[j]);
f[v.get_full()] += 1;
}
}
vector <ll> g(n);
g[0] = 0;
for (int i = 1; i < n; i++){
hashed_string v = hashed_string();
v.add_hash(angle[i]);
if (f[v.get_full()] <= 1){
g[i] = find_dis(i);
continue;
}
ll cur = 0; bool flag = false;
for (int j = i + 1; j < n; j++){
cur += dis(l1[j], l1[j-1]);
v.add_hash(dis(l1[j], l1[j - 1]));
v.add_hash(angle[j]);
if (f[v.get_full()] <= 1){
g[i] = find_dis(j) + cur;
flag = true;
break;
}
}
if (!flag){
g[i] = dis(l1[n-1], l1[0]) + cur;
}
}
ll answ = 0;
for (int i = 0; i < n; i ++){
answ = max(answ, g[i] - find_dis(i));
}
cout << answ << "\n";
}
int main() {
freopen("lightsout.in","r",stdin);
freopen("lightsout.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll t = 1;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nIGludDsKI2RlZmluZSBpbmYgMTAwMDAwMDAwMDAwMDAwMExMCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDdMTAojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpID0gYTsgaSA8IGI7IGkrKykKY29uc3QgaW50IE4gPSA1MDA7CnN0cnVjdCBjb3JkewogICAgbGwgeCx5Owp9OwpsbCBkaXMoY29yZCBhLCBjb3JkIGIpewogICAgcmV0dXJuIGFicyhhLnggLSBiLngpICsgYWJzKGEueSAtIGIueSk7IAp9CmxsIGNhbGMoY29yZCBhLCBjb3JkIGIsIGNvcmQgYyl7CiAgICBsbCBkeDEgPSBhLnggLSBiLng7CiAgICBsbCBkeTEgPSBhLnkgLSBiLnk7CiAgICBsbCBkeDIgPSBjLnggLSBiLng7CiAgICBsbCBkeTIgPSBjLnkgLSBiLnk7CgogICAgbGwgY3Jvc3MgPSBkeDEgKiBkeTIgLSBkeTEgKiBkeDI7CgogICAgaWYgKGNyb3NzID09IDApIHJldHVybiAyOyAvLyBzdHJhaWdodAogICAgaWYgKGNyb3NzID4gMCkgcmV0dXJuIDE7ICAvLyBvbmUgdHVybiBkaXJlY3Rpb24KICAgIHJldHVybiAzOyAgICAgICAgICAgICAgICAgLy8gdGhlIG90aGVyIHR1cm4gZGlyZWN0aW9uCn0KY29uc3QgbGwgTW9kID0gMTAwMDAwMDAwOUxMOwpjb25zdCBsbCBCYXNlID0gMjcxTEw7CgpzdHJ1Y3QgaGFzaGVkX3N0cmluZ3sKICAgIHByaXZhdGU6CiAgICBzdHJpbmcgczsgbGwgbjsKICAgIHZlY3RvciA8bGw+IHByZWZpeDsKICAgIHZlY3RvciA8bGw+IHBvdzsKICAgIHB1YmxpYzoKICAgIGhhc2hlZF9zdHJpbmcoKXsKICAgICAgICBuID0gMDsKICAgICAgICBwcmVmaXguYXNzaWduKE4sIDApOwogICAgICAgIGxsIHN1bSA9IDA7CiAgICAgICAgcG93LmFzc2lnbihOKzEsIDApOwogICAgICAgIHBvd1swXSA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKXsKICAgICAgICAgICAgcG93W2ldID0gKHBvd1tpLTFdICogQmFzZSkgJSBNb2Q7CiAgICAgICAgfQogICAgfQogICAgdm9pZCBhZGRfaGFzaChsbCBhKXsKICAgICAgICBwcmVmaXhbbl0gPSBhICUgbW9kOyBpZiAobiA+PSAxKSBwcmVmaXhbbl0gPSAocHJlZml4W25dICsgcHJlZml4W24tMV0gKiBCYXNlKSAlIE1vZDsKICAgICAgICBuKys7ICAgIAogICAgfQogICAgbGwgZ2V0X2Z1bGwoKXsKICAgICAgICByZXR1cm4gcHJlZml4W24tMV07CiAgICB9CiAgICBsbCBnZXRfaGFzaChsbCBsLCBsbCByKXsKICAgICAgICBsbCB4ID0gcHJlZml4W3JdOwogICAgICAgIGlmIChsID49IDEpewogICAgICAgICAgICBsLS07CiAgICAgICAgICAgIHggPSAoKHggLSBwcmVmaXhbbF0gKiBwb3dbciAtIGxdICUgTW9kKSAlIE1vZCArIE1vZCkgJSBNb2Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiB4OwogICAgfQp9Owp2b2lkIHNvbHZlKCkgewogICAgbGwgbjsKICAgIGNpbiA+PiBuOwogICAgZGVxdWUgPGNvcmQ+IGwxKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiBsMVtpXS54ID4+IGwxW2ldLnk7CiAgICB2ZWN0b3IgPGxsPiBhbmdsZShuKTsKICAgIGZvciAoaW50IGk9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGFuZ2xlW2ldID0gY2FsYyhsMVsoaSAtIDEgKyBuKSAlIG5dLCBsMVtpXSwgbDFbKGkgKyAxKSAlIG5dKTsKICAgIH0KICAgIGF1dG8gZmluZF9kaXMgPSBbJl0obGwgaSkgLT4gbGx7CiAgICAgICAgaWYgKGkgPT0gMCkgcmV0dXJuIDBMTDsKICAgICAgICBsbCB4MSA9IDA7IGxsIG9yZyA9IGk7CiAgICAgICAgd2hpbGUgKGkgIT0gMCl7CiAgICAgICAgICAgIHgxICs9IGRpcyhsMVtpXSwgbDFbKGkgKyAxKSAlIG5dKTsKICAgICAgICAgICAgaSA9IChpICsgMSkgJSBuOwogICAgICAgIH0KICAgICAgICBpID0gb3JnOwogICAgICAgIGxsIHgyID0gMDsKICAgICAgICB3aGlsZSAoaSA+IDApewogICAgICAgICAgICB4MiArPSBkaXMobDFbaV0sIGwxW2kgLSAxXSk7CiAgICAgICAgICAgIGktLTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1pbih4MSwgeDIpOwogICAgfTsKICAgIG1hcCA8bGwsbGw+IGY7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAgaGFzaGVkX3N0cmluZyB2ID0gaGFzaGVkX3N0cmluZygpOwogICAgICAgIHYuYWRkX2hhc2goYW5nbGVbaV0pOwogICAgICAgIGZbdi5nZXRfZnVsbCgpXSArPSAxOwogICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IG47IGorKyl7CiAgICAgICAgICAgIHYuYWRkX2hhc2goZGlzKGwxW2pdLCBsMVtqIC0gMV0pKTsKICAgICAgICAgICAgdi5hZGRfaGFzaChhbmdsZVtqXSk7CiAgICAgICAgICAgIGZbdi5nZXRfZnVsbCgpXSArPSAxOwogICAgICAgIH0KICAgIH0gICAKICAgIHZlY3RvciA8bGw+IGcobik7CiAgICBnWzBdID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBoYXNoZWRfc3RyaW5nIHYgPSBoYXNoZWRfc3RyaW5nKCk7CiAgICAgICAgdi5hZGRfaGFzaChhbmdsZVtpXSk7CiAgICAgICAgaWYgKGZbdi5nZXRfZnVsbCgpXSA8PSAxKXsKICAgICAgICAgICAgZ1tpXSA9IGZpbmRfZGlzKGkpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgbGwgY3VyID0gMDsgYm9vbCBmbGFnID0gZmFsc2U7CiAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgbjsgaisrKXsKICAgICAgICAgICAgY3VyICs9IGRpcyhsMVtqXSwgbDFbai0xXSk7CiAgICAgICAgICAgIHYuYWRkX2hhc2goZGlzKGwxW2pdLCBsMVtqIC0gMV0pKTsKICAgICAgICAgICAgdi5hZGRfaGFzaChhbmdsZVtqXSk7CiAgICAgICAgICAgIGlmIChmW3YuZ2V0X2Z1bGwoKV0gPD0gMSl7CiAgICAgICAgICAgICAgICBnW2ldID0gZmluZF9kaXMoaikgKyBjdXI7CiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZmxhZyl7CiAgICAgICAgICAgIGdbaV0gPSBkaXMobDFbbi0xXSwgbDFbMF0pICsgY3VyOwogICAgICAgIH0KICAgIH0gICAKICAgIGxsIGFuc3cgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICsrKXsKICAgICAgICBhbnN3ID0gbWF4KGFuc3csIGdbaV0gLSBmaW5kX2RpcyhpKSk7CiAgICB9CiAgICBjb3V0IDw8IGFuc3cgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBmcmVvcGVuKCJsaWdodHNvdXQuaW4iLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJsaWdodHNvdXQub3V0IiwidyIsc3Rkb3V0KTsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgbGwgdCA9IDE7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==