#include <bits/stdc++.h>
using namespace std;
const int N = 3e3 + 10;
double dp[N][N][2], tot, ans;
int n, x[N], y[N];
double dis(int i, int j) {
  return sqrt((double)(x[i] - x[j]) * (x[i] - x[j]) +
              (double)(y[i] - y[j]) * (y[i] - y[j]));
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d %d", x + i, y + i);
  x[n] = x[0];
  y[n] = y[0];
  for (int i = 0; i < n; i++) tot += dis(i, i + 1);
  for (int i = 0; i < n; i++) ans = max(ans, tot - dis(i, i + 1));
  for (int l = 2; l <= n; l++) {
    for (int i = 0; i < n; i++) {
      int j = i + l - 1;
      j %= n;
      dp[i][j][0] = max(dp[(i + 1) % n][j][0] + dis(i, i + 1),
                        dp[(i + 1) % n][j][1] + dis(i, j));
      dp[i][j][1] = max(dp[i][(j - 1 + n) % n][0] + dis(i, j),
                        dp[i][(j - 1 + n) % n][1] + dis(j, (j - 1 + n) % n));
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 2; j < n; j++) {
      if (i == 0 && j == n - 1) continue;
      ans = max(ans, dis(i, j) + dp[i][j - 1][0] + dp[j][(i - 1 + n) % n][0]);
      ans = max(ans, dis(i, j) + dp[i + 1][j][1] + dp[(j + 1) % n][i][1]);
    }
  }
  printf("%.10f\n", ans);
}
