#include <bits/stdc++.h>
using namespace std;
inline void open(const char *s) {}
inline int rd() {
  static int x, f;
  x = 0;
  f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return f > 0 ? x : -x;
}
const int N = 51;
struct edge {
  int v, next;
} e[N << 1];
int n;
int tot = 0, head[N], siz[N];
long double fac[N], C[N][N], f[N][N], g[N], t1[N];
inline void add(int u, int v) {
  e[++tot] = edge{v, head[u]};
  head[u] = tot;
}
inline void pre(int n) {
  for (int i = 0; i <= n; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;
}
void dfs(int u, int fat) {
  memset(f[u], 0, sizeof f[u]);
  f[u][0] = 1;
  siz[u] = 1;
  for (int i = head[u]; i; i = e[i].next) {
    int v = e[i].v;
    if (v == fat) continue;
    dfs(v, u);
    memset(g, 0, sizeof g);
    long double hh = 0;
    for (int i = 0; i <= siz[v]; i++) {
      g[i] = hh + 1. * (siz[v] - i) * f[v][i];
      hh += .5 * f[v][i];
    }
    memset(t1, 0, sizeof t1);
    for (int i = 0; i <= siz[u] - 1; i++)
      for (int j = 0; j <= siz[v]; j++)
        t1[i + j] += f[u][i] * g[j] *
                     C[siz[u] - i - 1 + siz[v] - j][siz[v] - j] * C[i + j][i];
    siz[u] += siz[v];
    for (int i = 0; i <= siz[u] - 1; i++) f[u][i] = t1[i];
  }
}
int main() {
  n = rd();
  pre(n);
  for (int i = 2; i <= n; i++) {
    int x = rd(), y = rd();
    add(x, y);
    add(y, x);
  }
  for (int i = 1; i <= n; i++) {
    dfs(i, 0);
    printf("%.10Lf\n", f[i][n - 1] / fac[n - 1]);
  }
  return 0;
}
