#include <bits/stdc++.h>
using namespace std;
long double din[2][2500][2500];
int n;
struct Point {
  long double x, y;
  long double dist(const Point &o) const {
    return sqrtl((x - o.x) * (x - o.x) + (y - o.y) * (y - o.y));
  }
};
Point p[2500];
long double atstum(bool kur, int a, int b) {
  if (din[kur][a][b] >= -0.5l) return din[kur][a][b];
  if (a == b) return din[kur][a][b] = 0;
  if (kur == 0)
    din[0][a][b] =
        max(p[a].dist(p[b]) + atstum(1, (((a) + 1) % n), b),
            p[a].dist(p[(((a) + 1) % n)]) + atstum(0, (((a) + 1) % n), b));
  else
    din[1][a][b] =
        max(p[b].dist(p[a]) + atstum(0, a, (((b)-1 + n) % n)),
            p[b].dist(p[(((b)-1 + n) % n)]) + atstum(1, a, (((b)-1 + n) % n)));
  return din[kur][a][b];
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> p[i].x >> p[i].y;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) din[0][i][j] = din[1][i][j] = -1;
  }
  long double ma = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      ma = max(ma, p[i].dist(p[j]) + atstum(0, i, (((j)-1 + n) % n)) +
                       atstum(0, j, (((i)-1 + n) % n)));
      ma = max(ma, p[i].dist(p[j]) + atstum(1, (((i) + 1) % n), j) +
                       atstum(1, (((j) + 1) % n), i));
    }
  }
  cout << fixed << setprecision(10) << ma;
  return 0;
}
