#include <bits/stdc++.h>
using namespace std;
int n, root, lv[1000], rv[1000], mch[1000];
double w[1000][1000], la[1000], ra[1000], ans;
bool dfs(int p) {
  lv[p] = 1;
  for (int i = 0; i < 2 * n; i++) {
    double t = la[p] + ra[i] - w[p][i];
    if (!rv[i] && t < 1e-9) {
      rv[i] = 1;
      if (mch[i] == -1 || dfs(mch[i])) return mch[i] = p, 1;
    }
  }
  return 0;
}
bool km_al() {
  fill(mch, mch + 2 * n, -1);
  for (int i = 0; i < n; i++) {
    la[i] = -999999999.0;
    for (int j = 0; j < 2 * n; j++) la[i] = max(la[i], w[i][j]);
  }
  for (int x = 0; x < n; x++)
    if (x != root) {
      for (int i = 0; i < 2 * n; i++) lv[i] = rv[i] = 0;
      while (!dfs(x)) {
        double d = 999999999.0;
        for (int i = 0; i < n; i++)
          if (lv[i])
            for (int j = 0; j < 2 * n; j++)
              if (!rv[j]) d = min(d, la[i] + ra[j] - w[i][j]);
        for (int i = 0; i < n; i++)
          if (lv[i]) la[i] -= d, lv[i] = 0;
        for (int i = 0; i < 2 * n; i++)
          if (rv[i]) ra[i] += d, rv[i] = 0;
      }
    }
  for (int i = 0; i < 2 * n; i++)
    if (mch[i] != -1) {
      if (w[mch[i]][i] == -999999999.0) return cout << -1 << endl, 0;
      ans += w[mch[i]][i];
    }
  return cout << setprecision(20) << -ans << endl, 0;
}
double dis(int a, int b) { return sqrt(a * a + b * b); }
void graph() {
  int x[500], y[500];
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
    if (y[i] > y[root]) root = i;
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 2 * n; j++) w[i][j] = -999999999.0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (y[i] < y[j])
        w[i][2 * j] = w[i][2 * j + 1] = -dis(x[i] - x[j], y[i] - y[j]);
}
int main() {
  graph();
  km_al();
}
