#include <bits/stdc++.h>
using namespace std;
int n, v[2 * 100], x[2 * 100], ct, a[100], l[100];
long double f[100], dp[100][100], tree[100];
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  return x * f;
}
inline void add(int u, int v1) {
  v[++ct] = v1;
  x[ct] = a[u];
  a[u] = ct;
}
inline long double c(int n, int m) { return f[n] / f[m] / f[n - m]; }
inline void dfs(int u, int f) {
  l[u] = 1;
  dp[u][0] = 1;
  for (int i = a[u]; i; i = x[i]) {
    if (v[i] == f) continue;
    dfs(v[i], u);
    for (int j = 0; j < l[u] + l[v[i]]; j++) tree[j] = 0;
    int tot = l[u] + l[v[i]] - 1;
    for (int p = 0; p < l[u]; p++)
      for (int q = 0; q <= l[v[i]]; q++)
        tree[p + q] +=
            dp[u][p] * dp[v[i]][q] * c(p + q, p) * c(tot - p - q, l[v[i]] - q);
    l[u] += l[v[i]];
    for (int j = 0; j < l[u]; j++) dp[u][j] = tree[j];
  }
  if (f) {
    for (int i = 0; i <= l[u]; i++) tree[i] = 0;
    for (int i = 0; i < l[u]; i++) {
      tree[i] += (l[u] - i) * dp[u][i];
      for (int j = i + 1; j <= l[u]; j++) tree[j] += dp[u][i] * 0.5;
    }
    for (int i = 0; i <= l[u]; i++) dp[u][i] = tree[i];
  }
  return;
}
int main() {
  f[0] = 1;
  for (int i = 1; i <= 50; i++) f[i] = f[i - 1] * i;
  n = read();
  for (int i = 1; i < n; i++) {
    int u = read(), v = read();
    add(u, v), add(v, u);
  }
  for (int i = 1; i <= n; i++) {
    dfs(i, 0);
    printf("%.10lf\n", (double)dp[i][n - 1] / (double)f[n - 1]);
  }
  return 0;
}
