#include <bits/stdc++.h>
using namespace std;
const int N = 2500 + 7;
const int M = 9;
const int inf = 1e9 + 7;
const long long linf = 1e18 + 7;
const double pi = acos(-1);
const double eps = 1e-7;
const bool multipleTest = 0;
struct point {
  int x, y;
  void read() { scanf("%d%d", &x, &y); }
};
long long sqr(long long x) { return x * x; }
double dist(const point& a, const point& b) {
  return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
int n;
point a[N];
int st[N];
int k;
double dp[N][N][2];
void solve() {
  cin >> n;
  for (int i = 0; i < n; ++i) a[i].read();
  double res = 0;
  for (int len = 1; len < n; ++len) {
    for (int i = 0; i < n; ++i) {
      int j = (i + len) % n;
      int ti = (i + 1) % n;
      int tj = (j - 1 + n) % n;
      dp[i][j][0] = dp[ti][j][1] + dist(a[i], a[j]);
      dp[i][j][1] = dp[i][tj][0] + dist(a[i], a[j]);
      dp[i][j][0] = max(dp[i][j][0], dp[ti][j][0] + dist(a[i], a[ti]));
      dp[i][j][1] = max(dp[i][j][1], dp[i][tj][1] + dist(a[j], a[tj]));
      dp[i][j][0] = max(dp[i][j][0], dp[i][tj][0]);
      dp[i][j][1] = max(dp[i][j][1], dp[ti][j][1]);
      res = max(res, max(dp[i][j][0], dp[i][j][1]));
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      double cur = dp[i][(j - 1 + n) % n][0] + dp[j][(i - 1 + n) % n][0] +
                   dist(a[i], a[j]);
      res = max(res, cur);
      cur = dp[(i + 1) % n][j][1] + dp[(j + 1) % n][i][1] + dist(a[i], a[j]);
      res = max(res, cur);
    }
  }
  printf("%.10lf\n", res);
}
int main() {
  int Test = 1;
  if (multipleTest) {
    cin >> Test;
  }
  for (int i = 0; i < Test; ++i) {
    solve();
  }
}
