#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int n, sz[N];
double fac[N], f[N][N], g[N], t[N];
vector<int> G[N];
double C(int n, int m) {
  return n < m || n < 0 || m < 0 ? 0 : fac[n] / fac[m] / fac[n - m];
}
void dfs(int x, int p) {
  f[x][0] = sz[x] = 1;
  for (int i = 0; i < G[x].size(); i++)
    if (G[x][i] != p) {
      int v = G[x][i];
      dfs(v, x);
      memset(g, 0, sizeof(g));
      for (int j = 0; j <= sz[v]; j++)
        for (int k = 0; k <= j; k++)
          if (j > k)
            g[j] += f[v][k];
          else if (j == k)
            g[j] += 2 * (sz[v] - j) * f[v][k];
      memset(t, 0, sizeof(t));
      for (int j = 0; j <= sz[x]; j++)
        for (int k = 0; k <= sz[v]; k++)
          t[j + k] += f[x][j] * g[k] * C(j + k, j) *
                      C(sz[x] - j - 1 + sz[v] - k, sz[x] - j - 1);
      memcpy(f[x], t, sizeof(f[x]));
      sz[x] += sz[v];
    }
}
int main() {
  scanf("%d", &n);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i * 2;
  for (int i = 1, u, v; i < n; i++)
    scanf("%d%d", &u, &v), G[u].push_back(v), G[v].push_back(u);
  for (int i = 1; i <= n; i++) {
    memset(f, 0, sizeof(f));
    dfs(i, 0);
    printf("%.9f\n", f[i][n - 1] / fac[n - 1]);
  }
  return 0;
}
