#include <bits/stdc++.h>
using namespace std;
int n;
int x[2510], y[2510];
double ans;
double ri[2510], tr[2510];
double le[2510], tl[2510];
double gtdis(int a, int b) {
  return pow(pow((double)(x[a] - x[b]), 2.0) + pow((double)(y[a] - y[b]), 2.0),
             0.5);
}
double dp[2][2510][2510];
double dis[2510][2510];
int nxt(int x, int k) {
  x += k;
  if (x > n) x -= n;
  return x;
}
double mymax(double x, double y) {
  if (x > y) return x;
  return y;
}
int add(int x) {
  x++;
  if (x > n) x = 1;
  return x;
}
int sub(int x) {
  x--;
  if (x == 0) x = n;
  return x;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", x + i, y + i);
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      dis[i][j] = gtdis(i, j);
      dp[0][i][j] = dp[1][i][j] = dis[i][j];
      ans = mymax(ans, dis[i][j]);
    }
  }
  for (int l = 2; l <= n; l++) {
    memset(tl, 0, sizeof(tl));
    memset(tr, 0, sizeof(tr));
    for (int i = 1; i <= n; i++) {
      int j = i + l - 1;
      if (j > n) j -= n;
      dp[0][i][j] = dis[i][add(i)] + dp[0][add(i)][j];
      dp[1][i][j] = dis[sub(j)][j] + dp[1][i][sub(j)];
      dp[0][i][j] = mymax(dp[0][i][j], ri[j] + dis[i][j]);
      dp[1][i][j] = mymax(dp[1][i][j], le[i] + dis[i][j]);
      ans = mymax(ans, dp[0][i][j]);
      ans = mymax(ans, dp[1][i][j]);
      tl[i] = mymax(tl[i], dp[0][i][j]);
      tr[j] = mymax(tr[j], dp[1][i][j]);
    }
    for (int i = 1; i <= n; i++)
      le[i] = mymax(le[i], tl[i]), ri[i] = mymax(ri[i], tr[i]);
  }
  printf("%.10lf", ans);
  return 0;
}
