#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, sgn = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') sgn = -1;
  for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);
  return x * sgn;
}
const int N = 55;
int h[N], cnt, siz[N], n;
double f[N][N], tmp[N], fac[N];
struct edge {
  int v, nxt;
} e[N << 1];
void link(int x, int y) {
  e[++cnt] = (edge){y, h[x]};
  h[x] = cnt;
}
double C(int x, int y) { return fac[x] / fac[y] / fac[x - y]; }
void dfs(int x, int p) {
  f[x][0] = 1;
  siz[x] = 1;
  for (int i = h[x], y; i; i = e[i].nxt) {
    if ((y = e[i].v) == p) continue;
    dfs(y, x);
    int tot = siz[x] + siz[y] - 1;
    for (int j = 0; j <= tot; j++) tmp[j] = 0;
    for (int j = 0; j < siz[x]; j++)
      for (int k = 0; k <= siz[y]; k++)
        tmp[j + k] +=
            f[x][j] * f[y][k] * C(j + k, j) * C(tot - j - k, siz[x] - j - 1);
    for (int j = 0; j <= tot; j++) f[x][j] = tmp[j];
    siz[x] += siz[y];
  }
  if (p == 0) return;
  for (int i = 0; i <= siz[x]; i++) tmp[i] = 0.;
  for (int i = 0; i < siz[x]; i++) {
    tmp[i] += f[x][i] * (siz[x] - i);
    for (int j = i + 1; j <= siz[x]; j++) tmp[j] += f[x][i] / 2.;
  }
  for (int i = 0; i <= siz[x]; i++) f[x][i] = tmp[i];
}
int main() {
  n = read();
  for (int i = (fac[0] = 1); i <= n; i++) fac[i] = fac[i - 1] * i;
  for (int i = 1, u, v; i < n; i++)
    u = read(), v = read(), link(u, v), link(v, u);
  for (int i = 1; i <= n; i++) {
    memset(f, 0, sizeof(f));
    dfs(i, 0);
    printf("%.9lf\n", f[i][n - 1] / fac[n - 1]);
  }
  return 0;
}
