#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<pair<double, double> > a;
double dp[2555][2555][2];
int go(int x) {
  x %= n;
  if (x < 0) x += n;
  return x;
}
double dis(int i, int j) {
  return sqrt((a[i].first - a[j].first) * (a[i].first - a[j].first) +
              (a[i].second - a[j].second) * (a[i].second - a[j].second));
}
double gao(int hed, int tal, int o) {
  if (dp[hed][tal][o] > -1) return dp[hed][tal][o];
  int dir = o * 2 - 1;
  if (go(hed + dir) == tal) return dp[hed][tal][o] = 0;
  int nxthed = go(hed + dir);
  int nxttal = go(tal - dir);
  dp[hed][tal][o] = max(gao(nxthed, tal, o) + dis(hed, nxthed),
                        gao(nxttal, hed, o ^ 1) + dis(hed, nxttal));
  return dp[hed][tal][o];
}
void solve() {
  cin >> n;
  a.clear();
  for (int i = 0; i < int(n); ++i) {
    int x, y;
    cin >> x >> y;
    a.push_back(make_pair(x, y));
  }
  for (int i = 0; i < int(n); ++i)
    for (int j = 0; j < int(n); ++j) dp[i][j][0] = dp[i][j][1] = -2;
  double ans = 0;
  for (int i = 0; i < int(n); ++i) {
    double len = dis(i, go(i + 1));
    len += max(gao(i, go(i + 1), 0), gao(go(i + 1), i, 1));
    ans = max(len, ans);
  }
  cout.precision(10);
  cout << ans << endl;
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(0);
  solve();
}
