#include <bits/stdc++.h>
const double PI = acos(-1);
using namespace std;
int n;
int X[2500], Y[2500];
double dp[2500][2500 * 2][2];
double dist[2500][2500];
double solve(int s, int e, int t) {
  if (s >= e) return 0;
  if (s >= n) s -= n, e -= n;
  double& ret = dp[s][e][t];
  if (ret == ret) return ret;
  ret = 0;
  int lead = (t == 0) ? s : e;
  int l = (t == 0) ? (s + 1) : s, r = (t == 0) ? e : (e - 1);
  double a = dist[lead % n][l % n] + solve(l, r, 0);
  double b = dist[lead % n][r % n] + solve(l, r, 1);
  ret = max(a, b);
  return ret;
}
void build() {
  for (int l = 1; l < n; l++) {
    for (int s = n - 1; s >= 0; s--) {
      int e = s + l;
      if (e > n - 1) continue;
      for (int t = 0; t < 2; t++) {
        int lead = (t == 0) ? s : e;
        int l = (t == 0) ? (s + 1) : s, r = (t == 0) ? e : (e - 1);
        double a = dist[lead][l] + dp[l][r][0];
        double b = dist[lead][r] + dp[l][r][1];
        dp[s][e][t] = max(a, b);
      }
    }
  }
  for (int l = 1; l < n; l++) {
    for (int s = n - 1; s >= 0; s--) {
      int e = s + l;
      for (int t = 0; t < 2; t++) {
        int lead = (t == 0) ? s : e;
        int l = (t == 0) ? (s + 1) : s, r = (t == 0) ? e : (e - 1);
        double a = dist[lead % n][l % n] +
                   (l >= n ? dp[l - n][r - n][0] : dp[l][r][0]);
        double b = dist[lead % n][r % n] +
                   (l >= n ? dp[l - n][r - n][1] : dp[l][r][1]);
        dp[s][e][t] = max(a, b);
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); i++) scanf("%d %d", X + i, Y + i);
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++)
      dist[i][j] = hypot(X[i] + 0.0 - X[j], Y[i] + 0.0 - Y[j]);
  build();
  double ans = 0;
  for (int pivot = 0; pivot < (n); pivot++)
    ans = max(ans, solve(pivot, pivot + n - 1, 0));
  printf("%.18f\n", ans);
  return 0;
}
