#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55;
struct edge {
  int nxt, to;
} e[MAXN << 2];
int n, x, y, head[MAXN], sz[MAXN], tot;
double cur[MAXN], tmp[MAXN], dp[MAXN][MAXN], fac[MAXN];
void add(int x, int y) {
  e[++tot] = (edge){head[x], y};
  head[x] = tot;
}
double C(int x, int y) { return fac[x] / (fac[x - y] * fac[y]); }
double solve(int x, int y) { return C(x + y, x); }
void dfs(int x, int anc) {
  sz[x] = 1;
  dp[x][0] = 1;
  for (int i = head[x]; i; i = e[i].nxt)
    if (e[i].to != anc) {
      dfs(e[i].to, x);
      memset(cur, 0, sizeof(cur));
      memset(tmp, 0, sizeof(tmp));
      for (int j = 0; j <= sz[e[i].to]; j++) {
        for (int k = 0; k < j; k++) cur[j] += 0.5 * dp[e[i].to][k];
        cur[j] += (sz[e[i].to] - j) * dp[e[i].to][j];
      }
      for (int j = 0; j < sz[x]; j++)
        for (int k = 0; k <= sz[e[i].to]; k++)
          tmp[j + k] += dp[x][j] * cur[k] * solve(j, k) *
                        solve(sz[e[i].to] - k, sz[x] - 1 - j);
      for (int j = 0; j < sz[x] + sz[e[i].to]; j++) dp[x][j] = tmp[j];
      sz[x] += sz[e[i].to];
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) scanf("%d%d", &x, &y), add(x, y), add(y, x);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;
  for (int i = 1; i <= n; i++)
    dfs(i, 0), printf("%.10lf\n", dp[i][n - 1] / fac[n - 1]);
  return 0;
}
