#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e1 + 7;
template <typename T>
inline T read() {
  T res = 0, flag = 1;
  char in = getchar();
  while (!isdigit(in)) {
    if (in == '-') flag = -1;
    in = getchar();
  }
  while (isdigit(in)) {
    res = (res << 1) + (res << 3) + in - '0';
    in = getchar();
  }
  return res * flag;
}
template <typename T>
inline void chkmax(T &a, T b) {
  if (a < b) a = b;
}
template <typename T>
inline void chkmin(T &a, T b) {
  if (a > b) a = b;
}
long double fac[MAXN];
inline long double C(int n, int m) {
  if (n < m) return 0;
  return fac[n] / fac[n - m] / fac[m];
}
int n;
int siz[MAXN];
long double dp[MAXN][MAXN];
long double tmp[MAXN], g[MAXN];
int dex, head[MAXN], to[MAXN << 1], nxt[MAXN << 1];
inline void Link(int x, int y) {
  nxt[++dex] = head[x];
  to[dex] = y;
  head[x] = dex;
}
void dfs(int u, int fa) {
  siz[u] = 1;
  dp[u][0] = 1;
  for (int e = head[u], v; e; e = nxt[e]) {
    if ((v = to[e]) == fa) continue;
    dfs(v, u);
    for (int i = 0; i <= siz[v]; ++i) g[i] = 0;
    for (int i = 0; i <= siz[v]; ++i) {
      for (int j = 0; j < i; ++j) g[i] += dp[v][j];
      g[i] /= 2;
      g[i] += dp[v][i] * (siz[v] - i);
    }
    int tp = siz[u] + siz[v];
    for (int i = 0; i <= tp; ++i) tmp[i] = 0;
    for (int i = 0; i < siz[u]; ++i) {
      for (int j = 0; j <= siz[v]; ++j) {
        tmp[i + j] +=
            dp[u][i] * g[j] * C(i + j, i) * C(tp - 1 - i - j, siz[u] - 1 - i);
      }
    }
    siz[u] = tp;
    for (int i = 0; i < siz[u]; ++i) dp[u][i] = tmp[i];
  }
}
inline void init() {
  n = read<int>();
  for (int i = 1; i < n; ++i) {
    int x = read<int>();
    int y = read<int>();
    Link(x, y);
    Link(y, x);
  }
  fac[0] = 1;
  for (int i = 1; i < MAXN; ++i) fac[i] = fac[i - 1] * i;
}
inline void solve() {
  for (int i = 1; i <= n; ++i) {
    memset(dp, 0, sizeof dp);
    dfs(i, 0);
    printf("%.10lf\n", (double)(dp[i][n - 1] / fac[n - 1]));
  }
}
int main() {
  init();
  solve();
  return 0;
}
