#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  int f = 0;
  for (; c < '0' || c > '9'; f |= c == '-', c = getchar())
    ;
  for (; c >= '0' && c <= '9'; x = x * 10 + c - '0', c = getchar())
    ;
  if (f) x = -x;
}
const int N = 66;
struct E {
  int nxt, to;
} e[N * 2];
int head[N], e_cnt = 0;
double dp[N][N], g[N], ans[N], fac[N];
int sz[N], n;
inline void add(int x, int y) {
  e[++e_cnt] = (E){head[x], y};
  head[x] = e_cnt;
}
inline double C(int n, int m) {
  if (n < 0 || m < 0) return 0;
  return fac[n] / fac[m] / fac[n - m];
}
inline void dfs(int u, int fat) {
  dp[u][0] = 1.0;
  sz[u] = 1;
  for (int _ = head[u]; _; _ = e[_].nxt) {
    int v = e[_].to;
    if (v != fat) {
      dfs(v, u);
      for (int i = 0; i <= sz[v]; i++) {
        g[i] = 0;
        for (int j = 0; j < i; j++) g[i] += dp[v][j] * 0.5;
        g[i] += dp[v][i] * (sz[v] - i);
      }
      for (int i = 0; i <= sz[u] + sz[v]; i++) ans[i] = 0.0;
      for (int i = 0; i < sz[u]; i++)
        for (int j = 0; j <= sz[v]; j++)
          ans[i + j] += dp[u][i] * g[j] * C(i + j, j) *
                        C(sz[u] + sz[v] - i - j - 1, sz[u] - i - 1);
      sz[u] += sz[v];
      for (int i = 0; i <= sz[u]; i++) dp[u][i] = ans[i];
    }
  }
}
int main(void) {
  read(n);
  fac[0] = 1;
  for (int i = 1; i <= (n); i++) fac[i] = fac[i - 1] * i;
  for (int i = 1; i <= (n - 1); i++) {
    int x, y;
    read(x);
    read(y);
    add(x, y);
    add(y, x);
  }
  for (int i = 1; i <= (n); i++) {
    memset(dp, 0, sizeof dp);
    dfs(i, 0);
    printf("%.10f\n", dp[i][n - 1] / fac[n - 1]);
  }
}
