#include <bits/stdc++.h>
using namespace std;
int c[3050 * 2][2], ss = 1, h[3050][2], fi[3050], n, m, len;
bool b[3050], flag = false;
double ans;
inline int Read() {
  int x = 0;
  char y;
  do y = getchar();
  while (y < '0' || y > '9');
  do x = x * 10 + y - '0', y = getchar();
  while (y >= '0' && y <= '9');
  return x;
}
inline void Line(int x, int y) {
  c[++ss][0] = y;
  c[ss][1] = fi[x];
  fi[x] = ss;
  c[++ss][0] = x;
  c[ss][1] = fi[y];
  fi[y] = ss;
}
bool DFS(int x, int y, int z, int o) {
  if (x == z) {
    len = y + 1;
    return true;
  }
  for (int i = fi[x]; i; i = c[i][1])
    if (c[i][0] != o && DFS(c[i][0], y + 1, z, x)) return true;
  return false;
}
void DSF(int x, int y, int z, int o) {
  h[x][h[x][0] > 0] = y;
  b[x] = 1;
  if (y > 10) return;
  for (int i = fi[x]; i; i = c[i][1])
    if (c[i][0] != o && c[i][0] != z && !b[c[i][0]]) DSF(c[i][0], y + 1, x, o);
  b[x] = 0;
}
int main() {
  n = Read();
  for (int i = 1; i <= n; i++) {
    int k = Read() + 1, l = Read() + 1;
    if (!flag) flag = DFS(k, 0, l, 0);
    Line(k, l);
  }
  for (int i = 1; i <= n; i++) {
    memset(h, 0, sizeof(h));
    DSF(i, 1, 0, i);
    for (int j = 1; j <= n; j++)
      if (!h[j][1])
        ans += 1.0 / h[j][0];
      else
        ans +=
            1.0 / h[j][0] + 1.0 / h[j][1] - 2.0 / (h[j][0] + h[j][1] + len - 2);
  }
  printf("%.9lf\n", ans);
}
