#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2510;
double dp[MAXN][MAXN][2];
bool was[MAXN][MAXN][2];
int n;
double dist[MAXN][MAXN];
double X[MAXN], Y[MAXN];
inline double sqr(double x) { return x * x; }
inline int mod(int x) {
  if (x < 0) {
    x += n;
  }
  if (x >= n) {
    x -= n;
  }
  return x;
}
double updFalse(int st, int fin, int to);
double updTrue(int st, int fin, int to);
double rec(int st, int fin, bool dir);
int ITER = 0;
double updFalse(int st, int fin, int to) {
  double ln = dist[fin][to];
  double v1 = rec(st, to, false);
  double v2 = rec(mod(fin - 1), to, true);
  return max(v1, v2) + ln;
}
double updTrue(int st, int fin, int to) {
  double ln = dist[fin][to];
  double v1 = rec(st, to, true);
  double v2 = rec(mod(fin + 1), to, false);
  return max(v1, v2) + ln;
}
double rec(int st, int fin, bool dir) {
  if (was[st][fin][dir]) {
    return dp[st][fin][dir];
  }
  was[st][fin][dir] = true;
  if (st == fin) {
    return 0.0;
  }
  double res = 0.0;
  if (dir == false) {
    int to = mod(fin - 1);
    int k = ITER;
    while (k >= 0) {
      res = max(res, updFalse(st, fin, to));
      if (to == st) {
        break;
      }
      to = mod(to - 1);
      k--;
    }
    k = ITER;
    to = st;
    while (k >= 0) {
      res = max(res, updFalse(st, fin, to));
      if (to == mod(fin - 1)) {
        break;
      }
      to = mod(to + 1);
      k--;
    }
  } else {
    int to = mod(fin + 1);
    int k = ITER;
    while (k >= 0) {
      res = max(res, updTrue(st, fin, to));
      if (to == st) {
        break;
      }
      to = mod(to + 1);
      k--;
    }
    to = st;
    k = ITER;
    while (k >= 0) {
      res = max(res, updTrue(st, fin, to));
      if (to == mod(fin + 1)) {
        break;
      }
      to = mod(to - 1);
      k--;
    }
  }
  dp[st][fin][dir] = res;
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int xx, yy;
    scanf("%d%d", &xx, &yy);
    X[i] = xx;
    Y[i] = yy;
  }
  for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
      dist[i][j] = dist[j][i] = sqrt(sqr(X[i] - X[j]) + sqr(Y[i] - Y[j]));
    }
  }
  if (n == 2) {
    printf("%.18lf\n", dist[0][1]);
    return 0;
  }
  double ans = 0.0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) {
        continue;
      }
      ans = max(ans, dist[i][j] + rec(mod(i + 1), j, false));
      ans = max(ans, dist[i][j] + rec(mod(i - 1), j, true));
    }
  }
  printf("%.18lf\n", ans);
  return 0;
}
