#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) {
    if (ch == '-') f = -1;
  }
  for (; !isdigit(ch); ch = getchar()) {
    x = x * 10 + ch - 48;
  }
  return x * f;
}
const int N = 50;
const int P = 998244353;
double fact[N + 3];
double comb[N + 3][N + 3];
struct Edge {
  int v, nxt;
} e[(N << 1) + 3];
int fe[N + 3];
double dp[N + 3][N + 3];
double g[N + 3], tmp[N + 3];
int sz[N + 3];
int n, en;
void initcomb() {
  comb[0][0] = 1.0;
  for (int i = 1; i <= N; i++) {
    comb[i][0] = comb[i][i] = 1.0;
    for (int j = 1; j < i; j++)
      comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
  }
}
void addedge(int u, int v) {
  en++;
  e[en].v = v;
  e[en].nxt = fe[u];
  fe[u] = en;
}
void updsum(double &x, double y) { x += y; }
void dfs(int u, int prv) {
  dp[u][0] = 1.0;
  sz[u] = 1;
  for (int i = fe[u]; i; i = e[i].nxt) {
    int v = e[i].v;
    if (v == prv) continue;
    dfs(v, u);
    for (int j = 0; j <= sz[v]; j++) {
      g[j] = 0.0;
      for (int k = 0; k < sz[v] && k <= j; k++) {
        if (k == j) {
          updsum(g[j], dp[v][k] * (sz[v] - j));
        } else {
          updsum(g[j], dp[v][k] * 0.5);
        }
      }
    }
    for (int j = 0; j <= sz[u]; j++) {
      for (int k = 0; k <= sz[v]; k++) {
        updsum(tmp[j + k], dp[u][j] * g[k] * comb[j + k][k] *
                               comb[sz[u] + sz[v] - 1 - j - k][sz[v] - k]);
      }
    }
    sz[u] += sz[v];
    for (int j = 0; j <= sz[u]; j++) {
      dp[u][j] = tmp[j];
      tmp[j] = 0.0;
    }
  }
}
int main() {
  initcomb();
  fact[0] = 1.0;
  for (int i = 1; i <= N; i++) fact[i] = fact[i - 1] * i;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    addedge(u, v);
    addedge(v, u);
  }
  for (int i = 1; i <= n; i++) {
    memset(dp, 0, sizeof(dp));
    dfs(i, 0);
    printf("%.12lf\n", dp[i][n - 1] / fact[n - 1]);
  }
  return 0;
}
