#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("O2")
#pragma GCC optimize("inline")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
using namespace std;
const int INF = 1e9 + 7;
int n;
vector<int> G[55];
double dp[55][55][55][55];
int vis[55][55];
double tmp[55][55];
long long C[55][55];
double cpro[55][55][55][55];
void merge_dp(int asz, double a[][55], int bsz, double b[][55],
              double ret[][55]) {
  for (int i = 0; i <= asz + bsz; i++)
    for (int j = 0; j <= asz + bsz; j++) ret[i][j] = 0;
  for (int ia = 0; ia <= asz; ia++)
    for (int ja = 0; ja <= asz; ja++)
      for (int ib = 0; ib <= bsz; ib++)
        for (int jb = 0; jb <= bsz; jb++) {
          if (ia == 0 && ib == 0) {
            ret[ia + ib][0] = a[ia][0] * b[ib][0];
            continue;
          }
          for (int jt = ja + jb; jt <= asz + bsz; jt++)
            ret[ia + ib][jt] +=
                a[ia][ja] * b[ib][jb] *
                (cpro[jt][ja][asz][bsz] + cpro[jt][jb][bsz][asz]) /
                C[asz + bsz][asz];
        }
}
int dfs(int v, int par) {
  if (vis[v][par]) return vis[v][par];
  int tsz = 0;
  dp[v][par][0][0] = 1.0;
  for (int i = 0; i < (int)(G[v].size()); i++) {
    int u = G[v][i];
    if (u == par) continue;
    int csz = dfs(u, v);
    merge_dp(tsz, dp[v][par], csz, dp[u][v], tmp);
    tsz += csz;
    for (int j = 0; j <= tsz; j++)
      for (int k = 0; k <= tsz; k++) dp[v][par][j][k] = tmp[j][k];
  }
  if (par > 0) {
    for (int i = 0; i <= tsz; i++)
      for (int j = 0; j <= tsz; j++) {
        tmp[i][j] = dp[v][par][i][j];
        dp[v][par][i][j] *= 1 - 1.0 * j / (tsz + 1);
      }
    for (int i = 0; i <= tsz; i++)
      for (int j = 0; j <= tsz; j++)
        for (int k = j; k <= tsz; k++)
          dp[v][par][i + 1][k + 1] += tmp[i][j] * (1.0 / (tsz + 1));
    tsz++;
  }
  return vis[v][par] = tsz;
}
double aa[55];
double gen_ans(int v) {
  dfs(v, 0);
  memset(aa, 0, sizeof(aa));
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++) aa[i] += dp[v][0][i][j];
  for (int i = n; i >= 0; i--)
    for (int j = n; j > i; j--) aa[i] -= C[j][i] * aa[j];
  double ret = 0.0, t = 1.0;
  for (int i = 0; i <= n; i++) {
    ret = ret + aa[i] * t;
    t *= 0.5;
  }
  return ret;
}
void init_C() {
  C[0][0] = 1;
  for (int i = 1; i <= (int)(n); i++) {
    C[i][0] = 1;
    for (int j = 1; j <= (int)(n); j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  for (int a = 0; a <= n; a++)
    for (int b = 0; a + b <= n; b++)
      for (int ja = 0; ja <= a; ja++)
        for (int jt = ja; jt <= a + b; jt++)
          if (ja > 0)
            cpro[jt][ja][a][b] = C[jt - 1][ja - 1] * C[a + b - jt][a - ja];
          else
            cpro[jt][ja][a][b] = 0;
}
int main() {
  scanf("%d", &n);
  init_C();
  for (int i = 0; i < (int)(n - 1); i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (int i = 1; i <= (int)(n); i++) printf("%.8lf\n", gen_ans(i));
  return 0;
}
