#include <bits/stdc++.h>
const int Maxv = 110;
int Head[Maxv], siz[Maxv], cnt, n;
long double C[Maxv][Maxv], dp[Maxv][Maxv], g[Maxv];
struct Node {
  int v, next;
} N[Maxv << 1];
inline void addEdge(int u, int v) {
  N[++cnt].v = v;
  N[cnt].next = Head[u];
  Head[u] = cnt;
}
inline void DFS(int u, int fa) {
  siz[u] = dp[u][1] = 1;
  for (int l = Head[u]; l; l = N[l].next) {
    if (N[l].v == fa) continue;
    DFS(N[l].v, u);
    for (int i = 0; i <= siz[u] + siz[N[l].v]; i++) g[i] = 0;
    for (int i = 1; i <= siz[u]; i++) {
      for (int j = 1; j <= siz[N[l].v]; j++) {
        for (int k = 0; k <= siz[N[l].v]; k++) {
          long double tmp =
              dp[u][i] * dp[N[l].v][std::min(j, k + 1)] * (j <= k ? 0.5 : 1);
          g[i + k] += tmp * C[i + k - 1][k] *
                      C[siz[u] - i + siz[N[l].v] - k][siz[N[l].v] - k];
        }
      }
    }
    for (int i = 0; i <= siz[u] + siz[N[l].v]; i++) dp[u][i] = g[i];
    siz[u] += siz[N[l].v];
  }
}
int main() {
  for (int i = 0; i < Maxv; i++) {
    C[i][i] = C[i][0] = 1;
    for (int j = 1; j < i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d%d", &u, &v);
    addEdge(u, v);
    addEdge(v, u);
  }
  long double fac = 1;
  for (int i = 2; i < n; i++) fac *= (long double)i;
  for (int i = 1; i <= n; i++) {
    DFS(i, 0);
    printf("%.10lf\n", (double)(dp[i][n] / fac));
  }
  return 0;
}
