#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2500 + 10;
const int INF = 10000000;
struct node {
  int x, y;
} p[maxn];
double dis(node a, node b) {
  return sqrt(1LL * (a.x - b.x) * (a.x - b.x) +
              1LL * (a.y - b.y) * (a.y - b.y));
}
double dp[maxn][maxn][2];
int n;
int nxt(int x) {
  x = x + 1;
  if (x > n) x -= n;
  return x;
}
int pre(int x) {
  x = x - 1 + n;
  if (x > n) x -= n;
  return x;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &p[i].x), scanf("%d", &p[i].y);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      for (int k = 0; k <= 1; k++) dp[i][j][k] = 0;
  }
  for (int k = 1; k <= n - 1; k++) {
    for (int i = 1; i <= n; i++) {
      int j = i + k;
      if (j > n) j -= n;
      dp[i][j][0] = max(dp[nxt(i)][j][0] + dis(p[nxt(i)], p[i]),
                        dp[nxt(i)][j][1] + dis(p[j], p[i]));
      dp[i][j][1] = max(dp[i][pre(j)][0] + dis(p[i], p[j]),
                        dp[i][pre(j)][1] + dis(p[pre(j)], p[j]));
    }
  }
  double mx = 0;
  for (int i = 1; i <= n; i++) {
    int j = i + n - 1;
    if (j > n) j -= n;
    mx = max(mx, dp[i][j][0]);
  }
  printf("%.12lf\n", mx);
  return 0;
}
