#include <bits/stdc++.h>
using namespace std;
int lca[3005][3005];
int last[3005];
int cir[3005];
int lab[3005];
int par[3005];
int pre[6005];
int dep[3005];
int e[6005];
int f[3005];
int h[3005];
int n, m, cnt;
int find_cir(int x, int par, int cirst) {
  int i;
  h[x] = 1;
  for (i = last[x]; i != 0; i = pre[i])
    if (e[i] != par)
      if (e[i] == cirst || (!h[e[i]] && find_cir(e[i], x, cirst))) {
        cir[++cnt] = x;
        return 1;
      }
  return 0;
}
void dfs(int x) {
  int i;
  for (i = last[x]; i; i = pre[i])
    if (e[i] != par[x] && lab[e[i]] == 0) {
      f[e[i]] = f[x];
      par[e[i]] = x;
      dep[e[i]] = dep[x] + 1;
      dfs(e[i]);
    }
}
int find(int u, int v) {
  if (lca[u][v]) return lca[u][v];
  if (u == v) return lca[u][v] = u;
  if (dep[u] > dep[v])
    lca[u][v] = find(par[u], v);
  else
    lca[u][v] = find(u, par[v]);
  return lca[u][v];
}
double work() {
  int i, j, x, y, z;
  double ans = 0;
  for (i = 1; i <= n; ++i) {
    cnt = 0;
    memset(h, 0, sizeof h);
    if (find_cir(i, 0, i)) break;
  }
  for (i = 1; i <= cnt; ++i) {
    dep[cir[i]] = 1;
    f[cir[i]] = cir[i];
    lab[cir[i]] = i;
    dfs(cir[i]);
  }
  for (i = 1; i <= n; ++i)
    for (j = 1; j <= n; ++j)
      if (f[i] == f[j]) {
        x = find(i, j);
        y = dep[i] - dep[x] + dep[j] - dep[x] + 1;
        ans += 1.0 / y;
      } else {
        x = dep[i] + dep[j];
        y = (lab[f[i]] - lab[f[j]] + cnt) % cnt - 1;
        z = (lab[f[j]] - lab[f[i]] + cnt) % cnt - 1;
        ans += 1.0 / (x + y) + 1.0 / (x + z) - 1.0 / (x + y + z);
      }
  return ans;
}
int main() {
  int i, j, a, b;
  scanf("%d", &n);
  for (i = 1; i <= n; ++i) {
    scanf("%d %d", &a, &b);
    ++a, ++b;
    (e[++m] = b, pre[m] = last[a], last[a] = m),
        (e[++m] = a, pre[m] = last[b], last[b] = m);
  }
  printf("%.10lf\n", work());
  return 0;
}
