#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;
}