#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int n, h[N], cnt, siz[N];
double f[N][N], g[N], F[N], c[N][N];
struct edge {
  int v, n;
} e[N << 1];
int getint() {
  char ch;
  while (!isdigit(ch = getchar()))
    ;
  int x = ch - 48;
  while (isdigit(ch = getchar())) x = x * 10 + ch - 48;
  return x;
}
void addedge(int u, int v) {
  e[cnt] = (edge){v, h[u]}, h[u] = cnt++;
  e[cnt] = (edge){u, h[v]}, h[v] = cnt++;
}
void dfs(int x, int fa) {
  f[x][0] = 1, siz[x] = 0;
  for (int i = h[x], v; i != -1; i = e[i].n)
    if ((v = e[i].v) != fa) {
      dfs(v, x);
      for (int j = 0; j <= siz[v]; ++j) {
        g[j] = 0;
        for (int k = 0; k <= siz[v] - 1; ++k)
          if (k >= j)
            g[j] += f[v][k] * 0.5;
          else if (j)
            g[j] += f[v][j - 1];
      }
      for (int j = 0; j <= siz[x] + siz[v]; ++j) F[j] = 0;
      for (int j = 0; j <= siz[x]; ++j)
        for (int k = 0; k <= siz[v]; ++k)
          F[j + k] += f[x][j] * g[k] * c[j + k][j] *
                      c[siz[x] + siz[v] - j - k][siz[x] - j];
      for (int j = 0; j <= siz[x] + siz[v]; ++j) f[x][j] = F[j];
      siz[x] += siz[v];
    }
  ++siz[x];
}
int main() {
  n = getint();
  memset(h, -1, sizeof(h));
  for (int i = 1; i <= n - 1; ++i) addedge(getint(), getint());
  for (int i = 0; i <= n; ++i) c[i][i] = c[i][0] = 1;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= i - 1; ++j) c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
  double flv = 1;
  for (int i = 1; i <= n - 1; ++i) flv *= i;
  for (int i = 1; i <= n; ++i) {
    dfs(i, 0);
    printf("%.10lf\n", f[i][0] / flv);
  }
  return 0;
}
