#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
int n, tot, fst[N], to[2 * N], nxt[2 * N], cir[N], pos[N], len, dep[N], fa[N],
    subt[N];
bool vis[N];
void addedge(int u, int v) {
  nxt[++tot] = fst[u];
  fst[u] = tot;
  to[tot] = v;
  nxt[++tot] = fst[v];
  fst[v] = tot;
  to[tot] = u;
}
void fnd(int u) {
  if (len) return;
  vis[u] = true;
  for (int i = fst[u]; i && !len; i = nxt[i])
    if (to[i] != fa[u]) {
      if (vis[to[i]]) {
        for (int j = u; j != to[i]; j = fa[j]) cir[++len] = j, pos[j] = len;
        cir[++len] = to[i], pos[to[i]] = len;
        return;
      }
      fa[to[i]] = u;
      fnd(to[i]);
    }
}
void dfs(int u) {
  for (int i = fst[u]; i; i = nxt[i])
    if (to[i] != fa[u] && !pos[to[i]]) {
      fa[to[i]] = u;
      dep[to[i]] = dep[u] + 1;
      subt[to[i]] = subt[u];
      dfs(to[i]);
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v; i <= n; i++) {
    scanf("%d%d", &u, &v);
    addedge(u + 1, v + 1);
  }
  fnd(1);
  for (int i = 1; i <= len; i++) {
    fa[cir[i]] = 0;
    dep[cir[i]] = 0;
    subt[cir[i]] = i;
    dfs(cir[i]);
  }
  double ans = 0;
  for (int u = 1; u <= n; u++)
    for (int v = 1; v <= n; v++) {
      if (subt[u] == subt[v])
        ans += 1.0 / (abs(dep[u] - dep[v]) + 1);
      else {
        int A = dep[u] + dep[v] + abs(subt[u] - subt[v]) + 1,
            B = dep[u] + dep[v] + len - abs(subt[u] - subt[v]) + 1,
            C = dep[u] + dep[v] + len;
        ans += 1.0 / A + 1.0 / B - 1.0 / C;
      }
    }
  printf("%.10f\n", ans);
}
