#include <bits/stdc++.h>
using namespace std;
const int maxn = 60, inf = 1e9;
struct edge {
  int too, pre;
} e[maxn << 1];
int n, tot, x, y;
double f[maxn][maxn], tmp[maxn], g[maxn], fac[2 * maxn], sum[maxn];
int last[maxn], size[maxn];
template <typename T>
inline void read(T &k) {
  int f = 1;
  k = 0;
  char c = getchar();
  while (c < '0' || c > '9') c == '-' && (f = -1), c = getchar();
  while (c <= '9' && c >= '0') k = k * 10 + c - '0', c = getchar();
  k *= f;
}
inline void add(int x, int y) {
  e[++tot] = (edge){y, last[x]};
  last[x] = tot;
}
inline double C(int n, int m) {
  return (n < m) ? 0 : (fac[n] / (fac[m] * fac[n - m]));
}
void dfs(int x, int fa) {
  f[x][0] = 1;
  for (int i = last[x], too; i; i = e[i].pre)
    if ((too = e[i].too) != fa) {
      dfs(too, x);
      for (int j = 0; j <= size[x] + size[too]; j++) tmp[j] = g[j] = sum[j] = 0;
      sum[0] = f[too][0] / 2;
      for (int j = 1; j <= size[too]; j++) sum[j] = sum[j - 1] + f[too][j] / 2;
      for (int j = 0; j <= size[too]; j++) {
        if (j) g[j] = sum[j - 1];
        g[j] += (size[too] - j) * f[too][j];
      }
      for (int j = 0; j <= size[x]; j++) {
        for (int k = 0; k <= size[too]; k++)
          tmp[j + k] += f[x][j] * g[k] * C(j + k, j) *
                        C(size[x] + size[too] - j - k, size[x] - j);
      }
      size[x] += size[too];
      for (int k = 0; k <= size[x]; k++) f[x][k] = tmp[k];
    }
  size[x]++;
}
int main() {
  n = 100;
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;
  read(n);
  for (int i = 1; i < n; i++) read(x), read(y), add(x, y), add(y, x);
  for (int i = 1; i <= n; i++) {
    memset(size, 0, sizeof(size));
    memset(f, 0, sizeof(f));
    dfs(i, 0);
    printf("%.7lf\n", f[i][n - 1] / fac[n - 1]);
  }
}
